2017-05-08 49 views
2

我的canny邊緣示例有一個大問題。前幾天它正在工作,但最近我不知道爲什麼,當我使用一個讀取我的攝像頭的程序時,它不起作用。C++/CannyEdgeDetection.exe已停止工作Codeblocks/OpenCV錯誤:斷言失敗

Here's the problem

這是我的示例:

using namespace cv; 
using namespace std; 



int main() 
{ 
    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; 
    } 
    return 0; 
} 

我真的不知道發生了什麼,因爲我用的是相同的樣本,但它決定停止工作。

回答

0

該斷言檢查您輸入的cvtColor是否包含3或4個通道。任一相機都不能恢復數據,在這種情況下,cout << frame.size();應將[0 x 0]打印到控制檯上,或者相機不生成BGR圖像。您可以致電frame.channels()查詢頻道數量。

如果frame.size()返回[0 x 0],那麼您的相機要麼被OS禁用,要麼被另一個程序使用,要麼與OpenCV存在兼容性問題。你應該檢查它是否與其他程序一起工作。

否則,如果您的頻道數爲1,則表示您的相機已經變爲灰色圖像,應該省略轉換。我不認爲OpenCV支持其他通道計數的捕獲方法,但我可能是錯的。