如何从分水岭(OpenCV - C ++)获取分段区域以进行进一步分类

问题描述 投票:0回答:1

我想获得所有分段区域。我想测试一个特定的段是否是圆形(单元格)。

我可以在这类问题中使用findcontour吗?

Segmented Image

***编辑

我已经使用轮廓成功获得了分割区域。有关如何根据形状对这些轮廓进行分类的任何建议。 (去掉非圆形轮廓)。

情况如下:

Segmented Regions

c++ opencv image-segmentation opencv-contour watershed
1个回答
0
投票

是的,它应该适合你。如果“wshed”将是findContours()函数的输入图像。如果您认为可能存在嵌套区域,则应使用CV_RETR_TREE(如果要以特殊方式处理它们),如果要处理区域中的区域,则应使用CV_RETR_LIST;如果要忽略所有嵌套区域,则应使用CV_RETR_EXTERNAL区域。请参阅DocExample以供使用。

编辑1.0:

要回答您的编辑:圆形轮廓将具有一个外轮廓和一个内轮廓。因此,如果你使用CV_RETR_TREE并检查每个轮廓,如果内部有另一个轮廓,它是一个圆形轮廓,你可以保留它并删除所有其他轮廓。有关用法,请参阅here under 4. RETR_TREEhere

编辑2.0:似乎我很想念你。编辑1.0中的“循环”表示封闭对象。现在,我不是什么意思,你的意思是循环。如果凸度足够,我会引导你到convecHullconvexityDefects

如果你真的需要有一个圆/椭圆形状,我会尝试根据轮廓计算椭圆或圆的参数,并根据这些参数绘制一个理想的圆/椭圆,并将轮廓与它进行比较。但也许有更好的方法来实现这一目标。在这种情况下,我会建议你把它作为一个新问题,因为它与这个问题的主题没有任何关系。

© www.soinside.com 2019 - 2024. All rights reserved.