2017-05-08 145 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支持其他通道计数的捕获方法,但我可能是错的。