C++ / CannyEdgeDetection.exe 已停止工作 代码块 /OpenCV 错误:断言失败

C++ / CannyEdgeDetection.exe has stop working Codeblocks /OpenCV Error: Assertion failed

本文关键字:错误 OpenCV 断言 失败 代码 CannyEdgeDetection exe 停止工作 C++      更新时间:2023-10-16

我的精明边缘样本有一个大问题。几天前它正在工作,但最近我不知道为什么,当我使用读取我的网络摄像头的程序时,它不起作用。

这就是问题所在

这是我的样本:

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;
}

我真的不知道发生了什么,因为我使用相同的样本,但它决定停止工作。

该断言检查您对cvtColor的输入是否包含 3 或 4 个通道。相机未恢复数据,在这种情况下cout << frame.size();应将[0 x 0]打印到主机上,或者相机未生成 BGR 图像。您可以通过拨打frame.channels()来检查频道数。

如果frame.size()返回[0 x 0],则您的相机要么作系统禁用,要么被其他程序使用,要么与OpenCV存在兼容性问题。您应该检查它是否与其他程序一起使用。

否则,如果您的频道数为 1,则意味着您的相机已经获得灰色图像,您应该省略转换。我不认为 OpenCV 支持其他通道数的捕获方法,但我可能是错的。