gpt4 book ai didi

python - openCV:使用findContours检测圆

转载 作者:行者123 更新时间:2023-12-02 16:49:22 26 4
gpt4 key购买 nike

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

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

该程序检测到8个边缘为圆形的任何形状,因此我决定添加一些检查-我正在使用cv2.contourArea检查当前轮廓的区域,并且还在检查当前轮廓的cv2.minEnclosingCircle(cnt)的区域。

如果它们相等,我们有一个圆圈。

import numpy as np
import cv2

img = cv2.imread('1.jpg')
gray = cv2.imread('1.jpg',0)

ret,thresh = cv2.threshold(gray,127,255,1)

contours,h = cv2.findContours(thresh,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_NONE)

for cnt in contours:
approx = cv2.approxPolyDP(cnt, .03 * cv2.arcLength(cnt, True), True)
print len(approx)
if len(approx)==3:
print "triangle"
cv2.drawContours(img,[cnt],0,(122,212,78),-1)
elif len(approx)==4:
print "square"
cv2.drawContours(img,[cnt],0,(94,234,255),-1)
elif len(approx)==8:
area = cv2.contourArea(cnt)
(cx, cy), radius = cv2.minEnclosingCircle(cnt)
circleArea = radius * radius * np.pi
print circleArea
print area
if circleArea == area:
cv2.drawContours(img, [cnt], 0, (220, 152, 91), -1)


cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

例如,对于相同的形状,minEnclosingCircle区域为628.254637106,轮廓区域为569。
另一个示例:minEnclosingCircle区域为2220.55512328,而轮廓区域为2032.0。

如何正确计算该面积?

我将不胜感激!

我使用的图像:

以及检测到的形状:

最佳答案

关于python - openCV:使用findContours检测圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46641101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com