霍夫圆环变换

2022-05-28 16:32:02 浏览数 (1)

代码语言: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()前,对原始图像进行平滑操作,以减少图像中的噪声,避免发生误判。

0 人点赞