OpenCV - QueryFrame()从网络摄像头返回旧图像

7
我正在尝试使用OpenCV从网络摄像头中获取单帧。但是QueryFrame()返回的图像比当前帧旧得多。要获取最新的图像需要多次调用QueryFrame(),但即使如此,其延迟也比预期的当前图像慢2至3秒。我尝试了使用不同的网络摄像头,但结果相同。我尝试使用cv2的read()方法,但出现同样的问题。有没有办法修复这个问题并且使用OpenCV从网络摄像头中获取当前帧?
该Webcam分辨率为640/480,帧速率为30fps。操作系统: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])

你如何确定从相机中读取仅一个帧时捕获的图像滞后2~3秒? - zhangxaochen
在for循环中反复调用QueryFrame()函数时,返回的图像似乎会追赶上来。 - atree
是的,您可以在循环一段时间后保存第N帧。 - zhangxaochen
你能否与我们分享你的整个代码? - Hadi
@zhangxaochen 尝试过了,但是在长时间运行时帧率明显有延迟。 - atree
@Constantine,你可以安全地将其视为完整的代码。当我需要快照时,在代码的其他部分中调用cam.read()函数。 - atree
1个回答

5

对于我来说,解决这个问题的方法是只在需要拍摄照片时获取网络摄像头访问权限,并立即释放它。

def getframe(name):  
  cam.open(0)
  img=cam.read()
  cv2.imwrite(str(name)+".jpg",img[1])
  cam.release() 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接