openCV:使用findContours检测圆圈

时间:2017-10-09 07:40:50

标签: python opencv numpy cv2

我正在开发一个程序,我应该检测相同类型的形状,并用不同的颜色为每种类型着色。

我正在使用cv2.findCountours然后cv2.approxPolyDP来检测每个形状。

程序检测到任何形状有8条边作为圆形,所以我决定添加一些检查 - 我正在使用cv2.contourArea检查当前轮廓的区域,我也检查{的区域{1}}当前轮廓。

如果他们是平等的,我们就有一个圈子。

cv2.minEnclosingCircle(cnt)

我打印了每个区域,看到结果不同 - 即使形状明显是圆形。

例如,对于相同的形状,我为minEnclosingCircle区域获得了628.254637106,为了contourArea获得了569。 另一个例子:minEnclosingCircle区域为2220.55512328,contourArea为2032.0。

如何正确计算这个区域?

我将不胜感激任何帮助!

我使用的图像:

和检测到的形状:

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

而不是比较区域,你应该检查计数器的凸性

elif len(approx)==8:
        k=cv2.isContourConvex(approx)
        if k:
        #now you select a circle

答案 2 :(得分:0)

您可以尝试使用属于每个blob的一些属性。偏心,坚固,紧凑......等特征可以帮助你区分形状。

您可以在下面的链接中找到一些信息(但在C ++中)以提供一些提示

https://github.com/mribrahim/Blob-Detection