如何检测二进制图像中的多边形

时间:2017-03-27 13:08:07

标签: python opencv image-processing

我想在二进制图像中检测连续或闭合多边形的存在。图像可能包含可变数量边的多边形,也可能根本没有多边形。

以下是积极的案例:

enter image description here

而且,

这是一个否定的案例:

enter image description here

图像处理中是否有任何方法或某些算法来检测连续多边形?

感谢任何形式的帮助。

4 个答案:

答案 0 :(得分:2)

我希望你知道如何找到轮廓。

使用cv2.isContourConvex(contour)可以识别检测到的轮廓是否凸起。凸起是指凸起是否闭合。您将能够使用此函数分隔闭合和开放轮廓,该函数返回布尔值TrueFalse

分离出轮廓后,继续进行进一步分析,确定轮廓是否有边缘。

答案 1 :(得分:2)

答案 2 :(得分:2)

如果你需要同时检测凹面和凸面多边形,那么我可以建议你采用另一种方法,@mdh

已经告诉你了
  1. 首先,您需要找到轮廓(cv2.findContours
  2. 然后计算轮廓的面积(cv2.contourArea
  3. 计算二进制图像中黑色区域的面积(计算二进制图像中黑色像素的数量,openCv具有countNonZero函数,为你做到这一点)
  4. 比较2个值,如果它们接近(例如它们的比率接近1,或者大于一个值,你应该通过测试更多图像来选择它),那么你找到的轮廓是关闭的,所以它可能是多边形
  5. 当然,在自相交多边形中可能存在一些误差,和/或图像中有多个轮廓,但这可以通过仅选取轮廓边界框的分割来修复并应用算法每一个。

答案 3 :(得分:1)

我有一个工具来检测图像中的区域和属于该区域的一些属性。 https://github.com/mribrahim/Blob-Detection

认为如果它是一个多边形,它将是一个封闭的区域(正面情况)。

如果没有关闭,它将是一条线(负面情况)。

我可以使用blob检测工具找到区域属性。你可以使用一些属性,如偏心,坚固来区分正面和负面的情况。

例如;负面情况eccentiricity将被关闭为0,因为它是一行