2015-05-05 82 views
-1

我開發H/W環境覆盆子PI2 & VX-1000攝像頭 我開發S/W環境是Arch Linux的& C++ & OpenCV的不使用的OpenCV&打開相機電源並Arch Linux的

我能流使用mjpg-streamer 在網頁上使用此命令mjpg_streamer -i "./input_uvc.so -d /dev/video0 -n -f 30 -r 320x240" -o "./output_http.so -n -w ./www"

此運行良好。 (打開相機(意味着打開相機上的LED)) 但是,當我執行由opencv代碼製作的程序時,它不打開相機(不開啓led)並且功能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

請使用opencv的C++ api,而不是已棄用的c-api。 – berak

回答

0

讓我們改變這一行:

capture = cvCaptureFromCam(-1); 

要:

capture = cvCaptureFromCam(0); 

這將使用正確的指標,你的視頻攝像頭!

0

試圖通過0cvCaptureFromCAM()參數或者只是簡單地通過一個循環聽一些連接的攝像機:

CvCapture* capture = NULL; 

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

if(capture == NULL) 
    return; 

最後但並非最不重要的,你應該避免舊的C API,因爲它已被廢棄,支持很差,請嘗試使用cv::VideoCapture類。

+0

看看for的條件:'我<100 && capture == NULL' – Kornel

+0

請道歉,沒有看到它。你可以做一個簡短的編輯嗎? (所以我可以刪除DV /評論?) – berak

+0

沒問題:)短的編輯完成 – Kornel