2010-12-13 196 views
9

我已經安裝了OpenCV 2.2,現在我無法使攝像頭捕獲工作。它在2.1中運行正常。 OpenCV檢測到網絡攝像頭,不報告任何錯誤或警告,但每幀都是灰色圖像。我甚至嘗試從OpenCV維基的代碼示例:OpenCV攝像頭捕獲問題

VideoCapture cap(0); // open the default camera 
if(!cap.isOpened()) // check if we succeeded 
    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; 

有沒有人遇到過這個問題?我正在使用64位Win7和Visual Studio 2010.

+2

你是什麼意思「一個灰色的圖像「?純灰色,沒有結構?或者,只是一個灰度圖像?您正在調用cvtColor()來灰度化圖像,而imshow()調用正在顯示灰度版本... – jtdubs 2010-12-13 15:27:14

+0

純灰色,不是灰度。 – Figaro 2010-12-13 17:04:07

+0

有時候這個ib有點慢。在Mat邊緣之前添加一個'sleep(1)'或'cv :: waitKey(100)',並將其添加到for循環中。這應該工作。如果'frame'是一個精確的圖像,不要忘記chekc。 – nutario 2010-12-13 21:19:21

回答

1

我真的不知道有關OpenCV的任何信息,但不是下面一行中的問題?

cvtColor(frame, edges, CV_BGR2GRAY); 

看起來像你是故意將B-G-R色彩空間轉換爲灰度空間。

它不應該是這樣的:

cvtColor(frame, edges, CV_BGR2RGB); 
+0

大多數邊緣檢測算法僅適用於灰度圖像 - 該操作顯示的是灰度圖像而不是原始顏色 – 2010-12-13 16:54:11

+0

這就是通過在我不知道的事情上給出我的意見的問題...... :)我認爲這個問題是灰度圖像,而不是灰色圖像本身...傻了我。 :) – Machado 2010-12-15 18:29:33

9

我發現了一個很長的搜索後的溶液。

問題是如果在顯示幀之間沒有延遲發生這個問題。

該解決方案將cvWaitKey(20);放入循環中。

+1

只是想添加一個評論,這解決了我的問題!謝謝:) – amr 2011-01-08 17:16:21

3

問題出在我用過的相機MSFT LifeCam。我試過羅技C210和120,它們都能正常工作。

0

您也可以試試看this post

說得簡單,改變

進口品種

進口cv2.cv爲CV

爲我工作。另見文件here

3

這是解決方案。

捕獲的每個圖像幀在下面的第一行被轉換爲灰度圖像。 註釋和單獨運行代碼將顯示錯誤,因爲您沒有將任何已處理的圖像捕獲到正在imshow中顯示的邊框中。

因此評論cvtColor行並將imshow中的第二個參數更改爲frame。這將允許您顯示攝像頭的彩色視頻。

cvtColor(frame, edges, CV_BGR2GRAY); 

imshow("edges", frame); 
0

我有同樣的問題。我想這可能是我的相機上的設置,因爲我應該有一個640x480像素(我無法調整)的輸入,我無法調整提要的權限。所以我安裝了一個虛擬攝像頭,這幾乎解決了這兩個問題。我有一個輸入對話框,選擇了虛擬相機,它工作。我也設法在應用中將其設置爲640x480。

我的虛擬相機被稱爲ManyCam,但它看起來像是爲少女製作的,希望我安裝3個其他應用程序,但我仍然不確定天氣它不會與「補充」木馬一起出現。

但是,它可以讓您調整顏色,色調,對比度等您可能需要測試的東西。

+0

你最好先留言,詢問是否可以添加虛擬相機。 – StarPinkER 2013-02-15 03:01:47

0

我使用cvtColor,發現

cvtColor(image,image,CV_BGR2RGB);沒有工作。

但好消息是,這種改變工作!

cvtColor(image,image,**COLOR_BGR2RGB**); 

還包括:

include opencv2/imgproc/imgproc.hpp 

,並在.pro文件庫:

-lopencv_imgproc 
0

試試這個:

VideoCapture cap(0); // open the default camera 
if(!cap.isOpened()) // check if we succeeded 
{ 
    cout<<"Cam not captured\n"; 
} 

Mat frame; 
namedWindow("frame"); 
for(;;) 
{ 
    cap >> frame; // get a new frame from camera 
    imshow("frame", frame); 

    if(waitKey(10) >= 0) break; 
} 

return 0;