我编写了一个代码来启用使用 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`
最佳答案
解决了您的问题,似乎是由您的 key 检查引起的。
您不应多次调用 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()
关于python - 捕获帧时的 OpenCV 输入延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59704719/