OpenCV - QueryFrame() возвращает старое изображение с веб-камеры

Я пытаюсь получить один кадр с веб-камеры с помощью OpenCV. Но изображение, возвращаемое QueryFrame(), намного старше текущего кадра. Требуется несколько вызовов QueryFrame(), чтобы получить самое последнее изображение, но даже оно отстает на 2-3 секунды от ожидаемого текущего изображения. Я пытался использовать разные веб-камеры, но результаты одинаковы. Я попробовал метод read() из cv2, и у меня были те же проблемы. Есть ли способ исправить это и получить текущий кадр с веб-камеры, используя OpenCV?

Веб-камера имеет 30 кадров в секунду с разрешением 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])

1 ответ

Чтобы решить эту проблему, я должен был получить доступ к веб-камере именно тогда, когда мне нужно было сделать снимок и немедленно отпустить его.

def getframe(name):  
  cam.open(0)
  img=cam.read()
  cv2.imwrite(str(name)+".jpg",img[1])
  cam.release() 
Другие вопросы по тегам