霍夫圆检测是先进行圆心的确定,然后根据圆心推导出半径。
1。圆心检测的原理:圆心是无数条直线相交的结果,那么可以设定一个阈值,如果相交于一点的直线超过了阈值,那么就可以将该点确定为圆心。
2.确定了圆心,那么圆上的点到圆心的距离是固定的,即为半径,设定阈值,如果有很多点到圆心的距离超过了阈值,那么该距离就设定为半径
3.知道了半径和圆心,那么就获取到了整个圆的方程,就可以进行圆的检测和绘制了。
霍夫圆检测代码:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plot
img=cv.imread(r"C:\Users\Windows\Desktop\0072.jpg")
img1=cv.cvtColor(img,cv.COLOR_BGR2GRAY)#转灰度图
img1=cv.Canny(img1,10,76)#边缘检测
plot.imshow(img1,cmap=plot.cm.gray)
plot.show()
img4=cv.HoughCircles(img1,cv.HOUGH_GRADIENT,1,200,param1=100,param2=50,minRadius=60,maxRadius=110)
print(img4)
for i in img4[0,:]:
cv.circle(img1,(i[0],i[1]),i[2],(255,255,0),2)#绘制检测到的圆
plot.imshow(img1,cmap=plot.cm.gray)
plot.show()
霍夫圆参数记录:
cv.HoughCircles(img1,cv.HOUGH_GRADIENT,1,200,param1=100,param2=50,minRadius=60,maxRadius=110)
img=待处理图像
cv.HOUGH_GRADIENT=霍夫变换使用的算法
1,200=霍夫空间分辨率,圆心之间的最小距离
param1=100 =高阈值
param2=50 =检测圆心和确定半径时用的阈值
minRadius=60,maxRadius=110 =检测到圆半径的最小值和最大值