OpenCV cv::findcontours *** 异常

Posted

技术标签:

【中文标题】OpenCV cv::findcontours *** 异常【英文标题】:OpenCV cv::findcontours *** Exception 【发布时间】:2014-05-25 12:26:01 【问题描述】:

我有一个 3 通道 cv::Mat(RGB 480 高度 x 640 宽度),我想找到这张图片的轮廓。 我尝试了不同的例子: This one This one 但是每次我在该行中遇到 *** 错误时:

cv::findContours(contourOutput, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);

cv::findContours(image, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0));

我注意了所涉及的 cv::Mat 的大小以及它们的通道数。我不知道还能做什么。 经过几次操作,我的代码就是这个,我总是在 findcontours 中得到堆栈溢出。

                cv::Mat src_gray;
                cv::Mat dst;
                cv::Mat canny_output;
                std::vector<std::vector<cv::Point> > contours;
                std::vector<cv::Vec4i> hierarchy;

                cvtColor(src, src_gray, CV_BGR2GRAY);

                int threshold_value = 0;
                int threshold_type = 3;
                int max_BINARY_value = 4;
                threshold(src_gray, dst, threshold_value, max_BINARY_value, threshold_type);


                /// Detect edges using canny
                Canny(dst, canny_output, 100, 100 * 2, 3);
                /// Find contours
                findContours(canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0));

我得到的是:xxx.exe 中发生了“System.***Exception”类型的未处理异常

【问题讨论】:

您的 Canny 仍然使用 rgb src 图像作为输入,并且您的阈值无处可去(从不使用 dst) 是的,我注意到了,我更正了,但还是不行 仍然缺少确切的错误。 【参考方案1】:

findContours() 的输入必须是通道图像。您不能将 3 通道 BGR 图像传递给它。

解决方案是将您输入的图像转换为灰度。 例如。 cvtColor( src, src_gray, CV_BGR2GRAY );

当然它不一定是灰度图像,您可以使用split() 从图像中提取和使用任何单个通道,例如。色相、饱和度、值、B、G、R...等

此外,findContours() 最适合使用 二进制 输入图像,因此您可能需要在将单通道图像传递给 findContours() 之前对其进行阈值处理。

【讨论】:

以上是关于OpenCV cv::findcontours *** 异常的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV-寻找轮廓cv::findContours&绘制轮廓cv::drawContours

OpenCV计算机图像处理 —— 凸性缺陷 + 点多边形测试 + 形状匹配 + 轮廓分层与cv.findContours()

Opencv-python 找到图像轮廓并绘制,cv2.findContours()函数,求轮廓外接矩形,cv2.boundingrect()

youcans 的 OpenCV 例程200篇194.寻找图像轮廓(cv.findContours)

youcans 的 OpenCV 例程200篇194.寻找图像轮廓(cv.findContours)

opencv cv.findContours 函数详解 图像轮廓层级 图像轮廓检索方式详解