我正在尝试使用OpenCV从网络摄像头抓取一个帧。但是QueryFrame()返回的图像比当前帧要旧得多。它需要多次QueryFrame()调用才能获取最新图像,但即使如此,它也比预期的当前图像延迟了2到3秒。我尝试使用其他网络摄像头,但结果相同。我尝试了cv2中的read()方法,并遇到了同样的问题。反正有没有解决此问题,并使用OpenCV从网络摄像头获取当前帧?
网络摄像头具有30fps,分辨率为640/480。作业系统:Ubuntu 12.04,OpenCV 2.4.9
# CV code
import cv
capture = cv.CaptureFromCAM(0)
img = cv.QueryFrame(capture)
cv.SaveImage("test2.JPG", img)
# CV2 code
import cv2
cam = cv2.VideoCapture()
cam.open(-1)
img=cam.read()
cv2.imwrite("test3.jpg",img[1])
最佳答案
为我解决此问题的一种解决方法是仅在需要快照并立即释放它时才获取网络摄像头访问权限。
def getframe(name):
cam.open(0)
img=cam.read()
cv2.imwrite(str(name)+".jpg",img[1])
cam.release()