Задержка ввода OpenCV в кадрах захвата - PullRequest
2 голосов
/ 12 января 2020

Я написал код для включения захвата изображений с веб-канала с помощью OpenCV. Однако при каждом нажатии клавиши происходит задержка ввода, чтобы захватить мой кадр. Нет задержки, когда я использую это, чтобы выйти, но есть существенная задержка, когда я использую захват. Я измерил это, напечатав выписку внутри обоих случаев, при нажатии c выписка откладывается перед печатью. Проблема кажется мне чем-то вроде ... ресурсы камеры используются и не высвобождаются вовремя для следующего нажатия клавиши или что-то в этом роде ... но не уверен.

import cv2 as cv
import numpy as np
import glob
import matplotlib.pyplot as plt

cap = cv.VideoCapture(1)

img_counter = 0

while True:
    ret, frame = cap.read()
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # cv.imshow('frame',frame)
    cv.imshow('gray', gray)
    if not ret:
        break

    if cv.waitKey(1) & 0xFF == ord('q'):
        print('helloq')
        break

    elif cv.waitKey(1) & 0xFF == ord('c'):
        print('hello{}'.format(img_counter))
        img_name = "opencv_frame_{}.png".format(img_counter)
        cv.imwrite(img_name, gray)
        img_counter += 1

Я с использованием внешней веб-камеры и cv2.__version__ = 3.4.2`

1 Ответ

1 голос
/ 12 января 2020

Решил вашу проблему, похоже, она вызвана вашей проверкой ключа.

Вы не должны вызывать waitKey (1) более одного раза. Это вызывает отставание.

Попробуйте это решение:

cap = cv.VideoCapture(0)

img_counter = 0

while True:
    ret, frame = cap.read()
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # cv.imshow('frame',frame)
    cv.imshow('gray', gray)
    if not ret:
        break

    key = cv.waitKey(1)

    if key==ord('c'):
        print('img{}'.format(img_counter))
        img_name = "opencv_frame_{}.png".format(img_counter)
        cv.imwrite(img_name, gray)
        img_counter += 1
        print("Succesfully saved!")

    if key==ord('q'):
        print('Closing cam...')
        break

# When everything done, release the capture
cap.release()
cv.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...