python opencv 检测圆

import cv2
import numpy

import numpy as np



# 读取彩色图片
img = cv2.imread('C:\\Users\\MJY\\Desktop\\red3.jpg')

gimg = cv2.medianBlur(img, 3)
kernel = np.ones((10, 10))
gimg = cv2.cvtColor(gimg, cv2.COLOR_BGR2GRAY)
cv2.imshow('灰度图', gimg)
# ret, bimg = cv2.threshold(gimg, 200, 255, cv2.THRESH_BINARY)

edged = cv2.Canny(gimg,75,200)
cv2.imshow('edged', edged)

# edged2 = cv2.morphologyEx(edged, cv2.MORPH_OPEN, kernel)
# edged2 = cv2.morphologyEx(edged, cv2.MORPH_CLOSE, kernel)

edged2 = cv2.dilate(edged, kernel, iterations=1)

cv2.imshow('edged2', edged2)
#
# 确保至少发现一个圆

circles = cv2.HoughCircles(edged2, cv2.HOUGH_GRADIENT, 1,
                           100, param1=100, param2=10, minRadius=5, maxRadius=100)
# circles = np.uint16(np.around(circles))

print(circles)
for i in circles[0,:]:
# draw the outer circle
    cv2.circle(gimg,(i[0],i[1]),i[2],(255,255,0),2)
# draw the center of the circle
    cv2.circle(gimg,(i[0],i[1]),2,(255,255,0),3, )

cv2.imshow('detected circles',gimg)
cv2.waitKey(0)

上述在检测圆之前先用了中值滤波、灰度化、canny边缘检测、膨胀运算,然后运用霍夫圆检测
膨胀运算可以改为闭运算,检测出外圆轮廓更符合实际大小。因为膨胀操作会放大白色从而侵蚀圆的范围。
但是值得注意的一点是,进行开运算会报错,暂时不知道是为什么。

使用开运算的效果如下
在这里插入图片描述

发布了103 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44684139/article/details/103724450