Как захватить кадр из потока камеры точно при нажатии клавиши с использованием opencv в python? - PullRequest
2 голосов
/ 14 июля 2011

Я пытаюсь захватить изображение с веб-камеры при нажатии клавиши.Следующий код успешен

    import cv

    cv.NamedWindow("w1")
    camera = cv.CaptureFromCAM(-1)

    while True:

        key = cv.WaitKey(0);

        if key == 'q': 
            break;
        image = cv.QueryFrame(camera)
        cv.ShowImage("w1", image)


    cv.DestroyWindow("w1")

Он отлично работает при первом нажатии клавиши.Для следующего нажатия на клавишу это показывает кадр, очень близкий к первому, даже если вы переехали.После нескольких нажатий клавиш он меняется на фактическое изображение.Что я могу сделать вывод, так это то, что существует какой-то буфер, в котором хранятся кадры. Мне интересно, может ли кто-нибудь помочь мне получить точный кадр при нажатии клавиши.

Я использую opencv с интерфейсомк питону.Операционная система Ubuntu 11.04.Звонки для захвата кадра отправляются в библиотеку v4l.У меня есть встроенная веб-камера с моим ноутбуком dell.

Мне интересно, может ли кто-нибудь помочь мне с этой проблемой.

Большое спасибо

1 Ответ

3 голосов
/ 28 июля 2011

Я предлагаю вам попробовать это немного по-другому:

import cv

cv.NamedWindow("w1")
camera = cv.CaptureFromCAM(-1)

while True:
    image = cv.QueryFrame(camera)
    key = cv.WaitKey(33)

    if key == 'q':
        break
    elif key != -1:
        cv.ShowImage("w1", image)

cv.DestroyWindow("w1")

Обратите внимание на изменение в вызове cv.WaitKey (): вместо того, чтобы блокировать его, просто подождите разумное время.Затем проверьте, действительно ли была нажата клавиша (key! = -1).

Следует отметить, что ваш код работал на моем Mac OS X 10.6 с OpenCV 2.3.

...