gpt4 book ai didi

c++ - Canny 边缘检测后查找轮廓

转载 作者:行者123 更新时间:2023-11-27 23:12:15 28 4
gpt4 key购买 nike

我想从二进制 canny 边缘图像中提取轮廓。

原图为:

enter image description here

应用 cvCanny() 和 cvDilate() 后,我得到以下图像:

enter image description here

我需要将封闭框(整个蓝色框)检测为轮廓。我应用 cvFindContours() 并提取面积最大的轮廓。但是,当我应用 cvFindContours() 时,它会按如下方式修改上面的 canny 图像:

enter image description here

这不是我打算做的。然后输出最大的轮廓为蓝色框内的邮箱标志。

出了什么问题? cvFindContours() 是否修改输入图像?应该怎么做才能得到封闭的蓝色盒子?

谢谢。

最佳答案

是的,findContours 确实改变了图像。如果您仍然需要原始图像,请在图像拷贝上使用 findContours。

代替:

findContours(image, contours, mode, method);

使用:

findContours(image.clone(), contours, mode, method);

*编辑(回复评论):*

这取决于你定义什么为“最大”。如果您使用区域,这可能会有问题,因为在边缘 map 上调用 findContours 可能会导致非常长但非常细的轮廓。 “最大”的更好定义是边界矩形面积最大的轮廓。您可以使用名为 boundingRect 的函数来找到它。如果您想找到所有多边形的边界框,请在所有边界框之间使用 OR 运算符:

Rect bbox = boundingRect(contours[0]);
for(i=1; i<contours.size(); i++)
bbox = bbox | boundingRect(contours[i]);

关于c++ - Canny 边缘检测后查找轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537952/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com