OpenCV - QueryFrame() 返回摄像头较旧的图像

7 投票
1 回答
7173 浏览
提问于 2025-04-18 03:28

我正在尝试使用OpenCV从网络摄像头抓取一帧图像。但是,QueryFrame()返回的图像比当前帧要旧很多。需要多次调用QueryFrame()才能获取到最新的图像,但即便如此,图像仍然比预期的当前图像滞后2到3秒。我尝试了不同的网络摄像头,但结果都是一样的。我还尝试了cv2的read()方法,问题依旧。有没有办法解决这个问题,使用OpenCV从网络摄像头获取当前帧呢?

我的网络摄像头支持30帧每秒,分辨率为640x480。操作系统: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])

1 个回答

5

我解决这个问题的方法是:在我需要拍照的时候才去获取摄像头的权限,然后拍完照立刻释放这个权限。

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

撰写回答