2015-05-05 3 views
-1

Моя разработка H/W окружающей среды является малина Pi2 & VX-1000 камера Моя разработка S/W среды является Arch Linux & C++ & OpenCVне включается на камеру с помощью OpenCV & Arch Linux

Я мог течь на веб-странице с помощью mjpg-стримера с этой командой mjpg_streamer -i "./input_uvc.so -d /dev/video0 -n -f 30 -r 320x240" -o "./output_http.so -n -w ./www"

Этот пробег хорош. (включается камера (включение включается на камеру)) Но когда я выполняю программу, написанную кодом opencv, она не включает камеру (не включается светодиод), а функция cvCaptureFromCAM() возвращает NULL.

Мой исходный код

#include <iostream> 
#include <time.h> 

#include <opencv/cv.h> 
#include <opencv/highgui.h> 

using namespace cv; 
using namespace std; 

int main(int argc,char** argv) 
{ 
    char c; 
    IplImage* frame; 
    CvCapture* capture; 

    capture = cvCaptureFromCAM(-1); 

    if(capture == NULL) 
     cout << "Strange!!" << endl; 


    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH , 320); 
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT , 240); 

    bool bLoop = true; 

    cout << "Start streaming" << endl; 

    while (bLoop){ 
     cvGrabFrame(capture); // Get a frame from cam 
     frame = cvRetrieveFrame(capture, 0); // get a frame from capture 
     cvSaveImage("save.jpg", frame); 
     cvWaitKey(33); // wait key input for 33ms 

    } 

    cvReleaseCapture(&capture); 
    cvDestroyAllWindows(); 

    return 0; 

} 
+0

, пожалуйста, используйте opiskv C++ api, а не устаревший c-one. – berak

ответ

0

Давайте изменим эту строку:

capture = cvCaptureFromCam(-1); 

To:

capture = cvCaptureFromCam(0); 

Это будет использовать правильный индекс, что видео камера находится в!

0

Попробуйте пройти 0 в качестве аргумента cvCaptureFromCAM() или просто послушать подключенной камеры с помощью цикла:

CvCapture* capture = NULL; 

for(int i = 0; i < 100 && capture == NULL; i++) 
    capture = cvCaptureFromCAM(i); 

if(capture == NULL) 
    return; 

Последнее, но не менее вы должны избегать старый C API, так как он устарел и поддерживается плохо, попробуйте использовать класс cv::VideoCapture.

+0

Взгляните на условие для: 'i <100 && capture == NULL' – Kornel

+0

извинения, пожалуйста., Не видел. вы могли бы сделать короткое редактирование? (так что я могу удалить dv/comments?) – berak

+0

без проблем :) короткое редактирование сделано – Kornel

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