2015-11-19 32 views
1

我有一個灰度相機(不顏色),並試圖呈現圖像。我上Raspbian運行,在樹莓派2.我已經抓住了一些代碼,並將其裸露到最低限度,取得了一些進展:試圖用C++中的OpenCV渲染灰度相機中的圖像。幾幀後掛起

#include "opencv2/opencv.hpp" 
    #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 
      return -1; 
     bool rtn; 
//  rtn = cap.set(CV_CAP_PROP_FRAME_WIDTH , 752); 
//  cout << "set to 752:" << rtn << endl; 
//  rtn = cap.set(CV_CAP_PROP_FRAME_HEIGHT , 480); 
//  cout << "set to 480:" << rtn << endl; 
     int count = 1; 
     Mat edges; 
     namedWindow("edges",1); 
     for(;;) 
     { 
      Mat frame; 
      cap >> frame; // get a new frame from camera 
      cout << "cols:" <<frame.cols << endl; 
      cout << "rows:" << frame.rows << endl; 
      cout << "count:" << count++ << endl; 
      cout << "Channel Count:"<< frame.channels() << endl; 
    //  cvtColor(frame, edges, CV_BGR2GRAY); 
      imshow("edges", edges); 
      if(waitKey(30) >= 0) break; 
     } 
     // the camera will be deinitialized automatically in VideoCapture destructor 
     return 0; 
    }. 

現在,我得到的灰度圖像,但只有幾個運行(它會變化)幀,然後掛起。有趣的是,如果你等待足夠長的時間,有時它會在「選擇超時」消息後再掃描幾幀。

我已經嘗試運行以下運行應用程序之前,但它似乎並沒有幫助:

rmmod uvcvideo 
modprobe uvcvideo nodrop=1 timeout=5000 

而且,即使我指定爲720x480的攝像頭分辨率(每相機規格),它會報告幀大小爲640x480。

看來,當我把下面的代碼了:

cvtColor(frame, edges, CV_BGR2GRAY); 

它的工作原理,但它不是一個灰度圖像,它是綠色的。請注意,我已將註釋設置爲框架寬度和高度。

+0

你爲什麼要拆分單個通道矩陣(你告訴相機輸出是灰度)? – Miki

+0

我嘗試使用捕獲的圖像,但它是綠色的。 – jordanthompson

+0

如果是灰度,它可能是綠色的:D您可能只是顯示它錯了 – Miki

回答

0

由於您從相機捕捉幀,因此只要幀準備好就可以捕捉幀,因此您不需要等待30 ms,在將幀轉換爲灰色之前,只需1 ms就足夠了,請確保它有3個通道(如RGB或BGR幀)。順便說一句,cv :: VideoCapture :: Set函數可能無法在某些設備或某些屬性上工作。要設置圖像尺寸,你應該檢查你可以接受的相機尺寸,例如它可能只接受320x200,640x480,600x800,...

+0

30是好的,因爲它是33 fps,但改爲1會更好。但是,這並不能解釋它爲什麼會掛起。如果轉換不正常,它會拋出斷言失敗,所以沒關係 – Miki

+0

相機規格是752x480(https://www.leopardimaging.com/LI-USB30-V034.html) – jordanthompson

+0

@Nima t他仍然沒有回答這個問題。這應該是一個評論,而不是一個答案。如果有些事情不清楚,或者你認爲有些事情確實可以幫助,但是你不確定,請將其置於評論中。如果事實證明回答這個問題,你可以發表一個答案。 – Miki

0

原來我有電源問題。我增加了pi板的功率(在/boot/config.txt中有一個設置來做到這一點),這還不夠。我添加了一個USB功率分配器並使用了一個臺式電源。