一、获取圆形检测原理
很明显的看出较亮的点为圆心,然后通过半径进行绘制出圆。
二、实现步骤
由于霍夫圆检测对噪声比较明显,故需要首先对图像进行滤波操作(中值滤波等)
霍夫圆形检测是基于图像梯度实现的,分为两步:
1,检测边缘,发现可能是圆的圆形
2,基于第一步从候选的圆心中开始计算,求出最佳的半径大小
三、代码实现
cv2.HoughCircles(cimage,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
cv2.HOUGH_GRADIENT:基于梯度计算
1:步长
20:最小距离即检测出来的两个圆形之间的最小距离,超过这个最小距离才会认定是两个圆
param1=50,param2=30:高低阈值的设定
minRadius=0,maxRadius=0:当不确定圆的半径时,可以这样设定
import cv2
import numpy as np
from matplotlib import pyplot as plt
def detect_circles(image):
dst = cv2.pyrMeanShiftFiltering(image,10,100)
cimage = cv2.cvtColor(dst,cv2.COLOR_BGR2GRAY)
circles = cv2.HoughCircles(cimage,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv2.circle(image,(i[0],i[1]),i[2],(0,0,255),2)
cv2.circle(image,(i[0],i[1]),2,(255,0,0),2)
cv2.imshow("circles",image)
src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\circles.jpg")
cv2.imshow("image",src)
cv2.namedWindow("image",cv2.WINDOW_AUTOSIZE)
detect_circles(src)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果图如下:
Original: https://blog.csdn.net/qq_41264055/article/details/123958011
Author: beyond谚语
Title: 十六、霍夫圆形检测
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/637971/
转载文章受原作者版权保护。转载请注明原作者出处!