检测原理:
参考链接:https://www.cnblogs.com/ssyfj/p/9275977.html#一houghcircles方法
https://blog.csdn.net/zhaocj/article/details/50454847
实例演示:
代码如下:
#导入cv模块
import cv2 as cv
import numpy as np
#霍夫圆检测
def detect_circle_demo(image):
# dst = cv.bilateralFilter(image, 0, 150, 5) #高斯双边模糊,不太好调节,霍夫噪声敏感,所以要先消除噪声
# cv.imshow("1",dst)
# dst = cv.pyrMeanShiftFiltering(image,5,100) #均值迁移,EPT边缘保留滤波,霍夫噪声敏感,所以要先消除噪声
# cv.imshow("2", dst)
dst = cv.GaussianBlur(image,(13,15),15) #使用高斯模糊,修改卷积核ksize也可以检测出来
# cv.imshow("3", dst)
gray = cv.cvtColor(dst,cv.COLOR_BGR2GRAY)
circles = cv.HoughCircles(gray,cv.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))#around对数据四舍五入,为整数
for i in circles[0,:]:
cv.circle(image,(i[0],i[1]),i[2],(0,0,255),2)
cv.circle(image,(i[0],i[1]),2,(255,0,0),2) #圆心
cv.imshow("detect_circle_demo",image)
print("------------Python Opencv Tutorial!-------------")
# 读取图像,支持 bmp、jpg、png、tiff 等常用格式
src = cv.imread("F:/Projects/images/coins.png")
#创建窗口并显示图像
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src) #显示原图
detect_circle_demo(src)
cv.waitKey(0)
#释放窗口
cv.destroyAllWindows()
运行效果: