2011-01-20 71 views
2

我使用的OpenCV 2.2和Visual Studio 2010在Win 7的64位PC訪問網絡攝像頭。不能與OpenCV的

我能夠通過OpenCV顯示圖片和播放AVI文件,如「Learning OpenCV」中所述,但我無法捕獲網絡攝像頭圖像。即使與OpenCV文件一起提供的樣本也無法訪問網絡攝像頭。

我被問到「視頻源 - >捕獲源」,並且有兩種選擇:HP webcam Splitter和HP網絡攝像頭。如果我選擇HP攝像頭,窗口會立即關閉而不顯示任何錯誤。 (我認爲任何錯誤信息太快都無法在關閉之前看到)。如果我選擇HP網絡攝像頭分光器則新的窗口,在這裏的攝像頭圖像(視頻)都應該來了,充滿了統一的灰色。網絡攝像頭指示燈亮起,但看不到視頻。我的攝像頭正常工作與閃光燈(www.testmycam.com),並用DirectShow的http://www.codeproject.com/KB/audio-video/WebcamUsingDirectShowNET.aspx

我曾嘗試使用此得到一些錯誤信息:

#include "cv.h" 
#include "highgui.h" 
#include <iostream> 
using namespace cv; 
using namespace std; 

int main(int, char**) 
{ 
    VideoCapture cap("0"); // open the default camera 
    if(!cap.isOpened()) // check if we succeeded 
     { 
    cout << "Error opening camera!"; 
    getchar(); 
    return -1; 
} 

    Mat edges; 
    namedWindow("edges",1); 
    for(;;) 
    { 
     Mat frame; 
     cap >> frame; // get a new frame from camera 
     cvtColor(frame, edges, CV_BGR2GRAY); 
     GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); 
     Canny(edges, edges, 0, 30, 3); 
     imshow("edges", edges); 
     if(waitKey(30) >= 0) break; 
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor 
    return 0; 
} 

而且我得到的錯誤信息是:

warning: Error opening file (C:\Users\vp\work\ocv\opencv\modules\highgui\src\cap 
_ffmpeg.cpp:454) 
Error opening camera! 

我不知道這個「cap_ffmpeg.cpp」是什麼,我不知道這是否與多孔的「惠普媒體智能」的東西有任何問題。

任何幫助將不勝感激。

+0

在行視頻捕捉帽(「0」);我添加了「引號」。也許這就是問題所在。但仍然爲什麼默認樣本不工作?並且在結束「YouCam Mirage」流程後http://www.pacs-portal.co.uk/startup_pages/22000-22999/22266_YCMMirage.exe.htm,如果選擇「HP Webcam」而不是「 HP Webcam Spltter「。奇怪。 – Astromaz3 2011-01-20 16:42:40

+0

我不知道這是否適合你,但user660815的回覆解決了我所有的問題。您可能需要考慮將他的答案標記爲正確答案。 – Tom 2011-03-24 13:36:16

回答

11

我在Windows 7 64位上遇到了同樣的問題。我不得不重新編譯opencv_highgui改變在C 「預處理程序定義」/ C++的屬性頁的面板包括:

HAVE_VIDEOINPUT HAVE_DSHOW

希望這有助於

2

cap_ffmpeg.cpp是使用ffmpeg執行設備捕獲的源文件。如果來自OpenCV的給出的默認實例不與你的攝像頭的工作,你的運氣了。我建議你再買一個支持的。

+0

大鼠。至少現在我知道了。謝謝。 – Astromaz3 2011-01-20 16:38:53

1

這裏有一個文章我寫了一段時間回來。它使用videoInput庫從網絡攝像頭獲取輸入。它使用DirectX,因此它可以與幾乎所有的攝像頭一起使用。 Capturing images with DirectX

1

最近我安裝了OpenCV 2.2和NetBeans 6.9.1。我有相機捕捉一個問題,在窗口中的圖像是黑色的,但該程序運行非常好,沒有錯誤。我必須以管理員用戶身份運行NetBeans才能解決此問題。

我希望這可以幫助你。

1

我只是切換到OpenCV的2.2和我有本質上是相同的問題,但運行Vista 32位compture。攝像頭將開始,但我會得到一個錯誤消息,設置相機的寬度屬性。如果我特別要求DirectShow的攝像頭,cvCreateCameraCapture會失敗。
我的想法是怎麼回事是HighGUI分佈版本是建立不包括DirectShow的攝像機。在OpenCV的青睞的Windows攝像頭用於視頻可以在Windows,VFW但由於Windows Vista中傳出後,已被棄用,創造了各種各樣的問題。爲什麼他們不把它包括在內,我不知道。檢查源文件cap.cpp

我的下一個步驟是重建HighGUI自己,並確保標誌HAVE_DSHOW設置。我似乎記得OpenCV中的最後一個版本,我一直在使用,直到我重建它確保DirectShow的版本啓用有同樣的問題。

1

我經歷了同樣的問題。我的Vaio網絡攝像頭LED亮起,但屏幕上沒有圖像。 然後我試圖將第一幀導出爲JPEG文件並工作。然後,我試圖在捕捉任何幀之前插入33毫秒的延遲,這次它像一個魅力。希望這會有所幫助。

0

CMake的GUI,MSVC++ 10E, Vista 32bit,OpenCV2.2

看起來像HAVE_VIDEOINPUT/WITH_VIDEOINPUT選項不起作用。

然而,加入:/D HAVE_DSHOW /D HAVE_VIDEOINPUTCMAKE_CXX_FLAGSCMAKE_C_FLAGS對我來說是個竅門(由於宏定義會有警告)。

0

一旦你創建了cv::VideoCapture,你應該給出一個整數不是字符串(因爲字符串意味着輸入是一個文件)。

要打開默認的攝像頭,具備

cv::VideoCapture capture(0); 

打開流,它會正常工作。