2010-07-24 93 views
1

嗨,我嘗試使用下面的代碼我越來越黑屏雖然我的網絡攝像頭通過USB無法檢測OpenCV的

我的網絡攝像頭使用連接到我的電腦檢測OpenCV的網絡攝像頭,網絡攝像頭* * ICatch(VI)電腦攝像頭驅動程序** &我使用的OpenCV 2.1 VS 2008

#include "cv.h" 
#include "highgui.h" 

int main(int argc, char** argv) { 
cvNamedWindow("cam", CV_WINDOW_AUTOSIZE); 
CvCapture* capture; 
if (argc==1) { 
    capture = cvCreateCameraCapture(0); 
} else { 
    capture = cvCreateFileCapture(argv[1]); 
} 
assert(capture != NULL); 

IplImage* frame; 
while(1) { 
    frame = cvQueryFrame(capture); 
    if(!frame) break; 
    cvShowImage("cam", frame); 
    char c = cvWaitKey(10); 
    if(c == 27) break; 
} 
cvReleaseCapture(&capture); 
cvDestroyWindow("cam"); 
} 

回答

2

好吧,首先...做你的攝像頭的工作與其他網絡攝像頭應用程序?

你的代碼有點搞砸了!您創建一個名爲Example2_9的窗口,但您嘗試使用cvShowImage()繪製到另一個不存在的窗口(名爲cam)!修復這個!通過Example2_9替換凸輪的發生。

如果不解決這個問題,我可能會取代主()本月初:

int main(int argc, char** argv) 
{ 
    cvNamedWindow("Example2_9", CV_WINDOW_AUTOSIZE); 
    CvCapture* capture; 

    capture = cvCreateCameraCapture(-1); //yes, if 0 doesn't work try with -1 
    assert(capture != NULL); 

你的代碼沒有錯誤在幾個地方檢查,要小心。其中一個功能可能會返回一個錯誤,直到你做了適當的檢查纔會知道。

您還可以在Google上找到一堆其他OpenCV示例,它們調用cvCaptureFromCAM()而不是cvCreateCameraCapture()。如果上述建議不起作用,請嘗試!

還有一件事,在我的Macbook Pro上,我不得不使用cvCaptureFromCAM(0)來讓應用程序工作。在Linux上,我總是使用cvCaptureFromCAM(-1)。

+0

嗯,我是新來的OpenCV的,所以我不知道從哪裏照顧的錯誤,但我想cvCaptureFromCAM(0),cvCaptureFromCAM(-1) ,cvCreateCameraCapture(0),cvCreateCameraCapture(-1)對我來說沒有任何作用 – Hunt 2010-07-24 16:17:59

+0

我只是將這些行添加到我的代碼中,它現在正在工作 if(capture!= NULL)printf(「Working」); \t else \t printf(「Not working」); – Hunt 2010-07-24 19:10:55

+0

太棒了!如果它對你有幫助,不要忘了在我的答案上投票,甚至接受它作爲你的問題的正式答案,以便將來可以幫助其他人。謝謝! – karlphillip 2010-07-24 21:24:56

0

我通常使用

capture = cvCreateCameraCapture(-1); 

讓OpenCV的全自動檢測適當的相機。

+0

我已經嘗試使用-1但發生同樣的問題 – Hunt 2010-07-24 16:10:56

1

我面臨着同樣的問題,嘗試例如書LearningOpenCV 2-9。

我使用VS7旗艦版在Win7-Prof上編譯VM, Host-PC的WebCam是BisonCam,NB Pro;我嘗試了cvCreateCameraCapture的不同變體,它總是返回NULL;我甚至用VLC-Player成功測試了WebCam,因爲我不確定它是否適用於虛擬機。

我的解決辦法是利用類VideoCapture,其存儲所捕獲的圖像中的類的,所以轉換的交互的結構的IplImage是必要的。 (發現here

我的解決辦法是:

#include "opencv\cv.h" 
#include "opencv\highgui.h" 
#include <iostream> 
#include <string.h> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 

using namespace cv; 
... 
void Run_with_WebCAM(){ 
    std::string WindowName = "WebCam_Example"; 
    VideoCapture webcam; 
    webcam.open(0); 
    Mat m_frame; 
    if (webcam.isOpened()){ 
     // create a window 
     cvNamedWindow(WindowName.c_str(), CV_WINDOW_AUTOSIZE); 
     IplImage* frame; 
     while (1) { 
      // update frame and display it: 
      webcam >> m_frame; 

      // convert captured frame to a IplImage 
      frame = new IplImage(m_frame); 
      if (!frame) break; 
      cvShowImage(WindowName.c_str(), frame); 

      // Do some processing... 

      delete frame; 

      // some abort condition... 
     } 
     // release memory and destroy all windows 
     cvDestroyWindow(WindowName.c_str()); 
     ... 
    } 
}