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边缘检测、膨胀运算,然后运用霍夫圆检测
膨胀运算可以改为闭运算,检测出外圆轮廓更符合实际大小。因为膨胀操作会放大白色从而侵蚀圆的范围。
但是值得注意的一点是,进行开运算会报错,暂时不知道是为什么。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值