2016-04-25 5 views
4

Я пытаюсь протестировать очень простую программу для захвата видео с помощью камеры, но похоже, что окно всегда черное. Светодиод камеры включен, а программа скомпилирована просто отлично.black screen video capture opencv

#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include <iostream> 

using namespace cv; 
using namespace std; 

int main() { 
VideoCapture stream1(0); //0 is the id of video device.0 if you have only one camera. 

if (!stream1.isOpened()) { //check if video device has been initialised 
    cout << "cannot open camera"; 
} 

//unconditional loop 
while (true) { 
    Mat cameraFrame; 
    stream1.read(cameraFrame); 
    imshow("cam", cameraFrame); 
    if (waitKey(30) >= 0) 
     break; 
} 
system("pause"); 
return 0; 
} 
+0

вы подтвердили ли, что камера работает для о Эти приложения? Я могу запустить ваш код, и он отображает видео правильно, поэтому в коде нет ничего принципиально неправильного. – Aenimated1

ответ

0

Для того, чтобы сузить источник проблемы, вот как вы можете перейти:

  • Проверьте, если OpenCV highgui настроен правильно. Захват сохраненного видео с использованием

    VideoCapture stream1("video.avi"); 
    stream1.read(cameraFrame); 
    

    выполнить imshow на камеруFrame.

-Если вы все равно получите черный экран, заменить stream1.read(cameraFrame); с stream1>>cameraFrame; Если теперь вы можете увидеть ваше видео, это означает, что OpenCV highgui настроен правильно, и может быть проблема с камерой вы находитесь с помощью.

  • Часто основной драйвер камеры не предоставляет доступ к сторонним библиотекам, OpenCV в этом случае. Заменить VideoCapture stream1(0) на VideoCapture stream1(1). Теперь это будет указывать на основной драйвер камеры вашего устройства, а не на основной драйвер камеры.

  • Если черный экран сохраняется, я предложил бы использовать внешнюю веб-камеру для тестирования, если это возможно, и этот вопрос может быть в самой камере аппаратных

+0

Выполнение функции 'VideoCapture :: operator >>' в основном делает именно это. Должно быть что-то еще не так. – Aenimated1

+0

Я отредактировал свой ответ, чтобы добавить больше возможностей. Спасибо Aenimated. –

-1

У меня была та же проблема, и решить ее замена

if (waitKey(30) >= 0) 
    break; 

с

if((char)waitKey(10) == 'q') 
    break;