代码语言:javascript复制
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png',0)#原始图像
imgo=cv2.imread('C:/Users/xpp/Desktop/Lena.png',-1)#原始图像
o=cv2.cvtColor(imgo,cv2.COLOR_BGR2RGB)
oshow=o.copy()
img=cv2.medianBlur(img,5)#中值滤波
circles=cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=100,maxRadius=200)#霍夫圆环变换
circles=np.uint16(np.around(circles))
for i in circles[0, :]:#绘制霍夫圆环变换
cv2.circle(o,(i[0],i[1]),i[2],(255,0,0),12)
cv2.circle(o,(i[0],i[1]),2,(255,0,0),12)
plt.subplot(121)
plt.imshow(oshow)
plt.axis('off')
plt.subplot(122)
plt.imshow(o)
plt.axis('off')
(-0.5, 459.5, 459.5, -0.5)
算法:霍夫圆环变换是来检测图像中圆环,与使用霍夫直线变换检测直线原理类似。在霍夫圆环变换中,考虑圆环半径和圆环中心(x坐标、y坐标)。
circles=cv2.HoughCircles(img, method, dp, minDist, param1, param2, minRadius, maxRadius)
- img表示输入图像
- method表示检测方法
- dp表示累计器分辨率,如果dp=1,表示输入图像和累加器具有相同分辨率。
- minDist表示圆环中心间最小间距
- param1表示该参数缺省,默认值为100
- param2表示圆环中心位置收到投票数
- minRadius表示圆环半径最小值
- maxRadius表示圆环半径最大值
注意,在使用函数cv2.HoughLinesCircles()前,对原始图像进行平滑操作,以减少图像中的噪声,避免发生误判。