我想获取所有分段的区域。我想测试特定的片段是否为圆形(单元格)。
我可以在这种问题中使用findcontour吗?
***编辑
我已经成功地使用轮廓获得了分割区域。关于如何根据形状对这些轮廓进行分类的任何建议。 (删除非圆形轮廓)。
情况如下:
答案 0 :(得分:0)
是的,它应该为您工作。如果为“ wshed”,将是findContours()
函数的输入图像。
如果您认为可能会有嵌套区域,则如果要以特殊方式处理它们,则应使用CV_RETR_TREE
,如果也要处理区域中的区域,则应使用CV_RETR_LIST
CV_RETR_EXTERNAL
,如果您想忽略所有嵌套区域。
有关用法,请参见Doc和Example。
编辑1.0:
要回答您的编辑:圆形轮廓将具有一个外部轮廓和一个内部轮廓。因此,如果您使用CV_RETR_TREE
并检查每个轮廓内部是否有另一个轮廓,则该轮廓为圆形,您可以保留它并删除所有其他轮廓。有关用法,请参见here under 4. RETR_TREE或here
EDIT 2.0:
看来我误会了你。在Edit 1.0中,“圆形”是指封闭的对象。现在我不知道你对通函的意思。如果凸度足够大,我会引导您进入convecHull
和convexityDefects
。
如果真的需要有圆形/椭圆形,我会尝试根据轮廓计算椭圆或圆形的参数,并根据这些轮廓绘制理想的圆形/椭圆形,然后将轮廓与之比较。但是也许有更好的方法可以做到这一点。在这种情况下,我建议您将其作为一个新问题提出,因为它与该问题的主题没有任何关系。