我在检测圆圈区域时遇到问题。 我用opencv的HoughCircles函数试了一下。然而,尽管图像非常相似,但功能的参数必须不同才能检测到圆圈。python opencv - blob检测或圆圈检测
我尝试的另一种方法是迭代每个像素,并检查当前像素是否是白色。 如果是这种情况,那么检查该区域是否有斑点物体(斑点中心距离小于阈值)。如果有,则将像素追加到blob,如果没有,则创建一个新的blob。 这也没有正常工作。
有没有人有一个想法,我可以如何使这项工作(90%的检测)? 我附上了一个示例图像和另一个图像,我标记了圆圈。 谢谢!
UPDATE: 谢谢你的帮助迄今为止! 这是我获得的轮廓和面积过滤它们的代码:
im = cv2.imread('extract_blue.jpg')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
im_gauss = cv2.GaussianBlur(imgray, (5, 5), 0)
ret, thresh = cv2.threshold(im_gauss, 127, 255, 0)
# get contours
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours_area = []
# calculate area and filter into new array
for con in contours:
area = cv2.contourArea(con)
if 1000 < area < 10000:
contours_area.append(con)
这是我通过圆过滤部分,它直接在下面,我通过区域过滤代码:
contours_cirles = []
# check if contour is of circular shape
for con in contours_area:
perimeter = cv2.arcLength(con, True)
area = cv2.contourArea(con)
if perimeter == 0:
break
circularity = 4*math.pi*(area/perimeter*perimeter)
print circularity
if 0.8 < circularity < 1.2:
contours_cirles.append(con)
然而,新的名单“contours_cirles”是空的。我在环印有“圆”和值10之间的所有000和100 000
更新#2: 纠正现在运转缺少括号后!
contours_cirles = []
# check if contour is of circular shape
for con in contours_area:
perimeter = cv2.arcLength(con, True)
area = cv2.contourArea(con)
if perimeter == 0:
break
circularity = 4*math.pi*(area/(perimeter*perimeter))
print circularity
if 0.7 < circularity < 1.2:
contours_cirles.append(con)
非常感谢你们! :)
非常老的代码。但你可以检查这个。 https://github.com/bipul21/Colored-Ball-Tracking –
'(面积/周长*周长)'这对我来说看起来很奇怪。你确定,你没有忘记任何括号? – Moritz
是的,你是对的。 圆形度= 4 * math.pi *(面积/(周长*周长)) – cmplx96