我想获得所有分段区域。我想测试一个特定的段是否是圆形(单元格)。
我可以在这类问题中使用findcontour吗?
***编辑
我已经使用轮廓成功获得了分割区域。有关如何根据形状对这些轮廓进行分类的任何建议。 (去掉非圆形轮廓)。
情况如下:
是的,它应该适合你。如果“wshed”将是findContours()
函数的输入图像。如果您认为可能存在嵌套区域,则应使用CV_RETR_TREE
(如果要以特殊方式处理它们),如果要处理区域中的区域,则应使用CV_RETR_LIST
;如果要忽略所有嵌套区域,则应使用CV_RETR_EXTERNAL
区域。请参阅Doc和Example以供使用。
编辑1.0:
要回答您的编辑:圆形轮廓将具有一个外轮廓和一个内轮廓。因此,如果你使用CV_RETR_TREE
并检查每个轮廓,如果内部有另一个轮廓,它是一个圆形轮廓,你可以保留它并删除所有其他轮廓。有关用法,请参阅here under 4. RETR_TREE或here
编辑2.0:似乎我很想念你。编辑1.0中的“循环”表示封闭对象。现在,我不是什么意思,你的意思是循环。如果凸度足够,我会引导你到convecHull
和convexityDefects
。
如果你真的需要有一个圆/椭圆形状,我会尝试根据轮廓计算椭圆或圆的参数,并根据这些参数绘制一个理想的圆/椭圆,并将轮廓与它进行比较。但也许有更好的方法来实现这一目标。在这种情况下,我会建议你把它作为一个新问题,因为它与这个问题的主题没有任何关系。