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

时间:2019-03-22 12:23:06

标签: c++ opencv image-segmentation opencv-contour watershed

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

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

Segmented Image

***编辑

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

情况如下:

Segmented Regions

1 个答案:

答案 0 :(得分:0)

是的,它应该为您工作。如果为“ wshed”,将是findContours()函数的输入图像。 如果您认为可能会有嵌套区域,则如果要以特殊方式处理它们,则应使用CV_RETR_TREE,如果也要处理区域中的区域,则应使用CV_RETR_LIST CV_RETR_EXTERNAL,如果您想忽略所有嵌套区域。 有关用法,请参见DocExample

编辑1.0:

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

EDIT 2.0: 看来我误会了你。在Edit 1.0中,“圆形”是指封闭的对象。现在我不知道你对通函的意思。如果凸度足够大,我会引导您进入convecHullconvexityDefects

如果真的需要有圆形/椭圆形,我会尝试根据轮廓计算椭圆或圆形的参数,并根据这些轮廓绘制理想的圆形/椭圆形,然后将轮廓与之比较。但是也许有更好的方法可以做到这一点。在这种情况下,我建议您将其作为一个新问题提出,因为它与该问题的主题没有任何关系。