2013-11-11 3 views
0

Я пытаюсь открыть openCV для чтения изображения с веб-камеры моего компьютера. Код ниже успешно открывает веб-камеру (включается зеленый свет). Однако попытки захватить фрейм и, следовательно, считывать фрейм не выполняются. Я здесь в затруднении. Может ли кто-нибудь помочь?Не удается захватить рамку в OpenCV

Большое спасибо, Хиллари

P.S. Я запускаю Mac OS X 10.9 на MacBook Pro. И моя OpenCV версия 2.4.6.1

А вот код:

#include "opencv.hpp" 
using namespace cv; 

int main(int, char**) { 

    VideoCapture cap = VideoCapture(0); 

    if(!cap.isOpened()){ 
     printf("failed to open camera\n"); 
     return -1; 
    } 

    namedWindow("edges",1); 

    for(;;){ 
     if(waitKey(50) >= 0) break; 

     if(!cap.grab()){ 
      printf("failed to grab from camera\n"); 
     } 
    } 

    return 0; 
} 

ответ

0

Вы забыли читать новые кадры в вашем цикле и показать их! Там:

for(;;){ 
    if(waitKey(50) >= 0) break; 
    Mat frame; 
    if(!cap.grab()){ 
     printf("failed to grab from camera\n"); 
     break; 
    } 
    cap >> frame; 

    if(frame.empty()){ 
     printf("failed to grab from camera\n"); 
     break; 
    } 

    imshow("edges", frame); 
} 
+0

Спасибо за ваш ответ. Не 'cap >> frame' вызывает' grab() ', а затем' retrieve() '? В ссылке говорится: «Методы/функции объединяют VideoCapture :: grab() и VideoCapture :: retrieve() в один вызов». Поэтому, если 'grab()' fail не работает сам по себе, то не будет 'read()' fail слишком, потому что он вызывает grab first? –

+0

Да, вы правы, но это делает, однако 'operator >>' игнорирует возвращенный результат из 'grab()', поэтому у вас нет доступа к нему. Дело в том, что в большинстве случаев, если что-то случилось с веб-камерой, ваша программа вылетает из 'imshow()' из-за пустого 'frame'. Я исправил свой код, чтобы он теперь обрабатывал этот случай. – yuyoyuppe

+0

Большое спасибо за ваш ответ. Мне удалось заставить мой код работать. –

Смежные вопросы