opencv:霍夫圆变换

circles	= cv.HoughCircles( image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]	)
  • imge:输入的是一幅灰色的图片
  • method: 常用的是cv.HOUGH_GRADIENT
  • dp: 所使用的累加图像的分辨率。这个参数允许我们创建一幅分辨率比输入图像更低的累加器。这样做是有意义的,因为我们并不能保证图中的圆会自然落入与图像本身的宽度或高度相同数量的分区。如果dp设置为1,那么分辨率不发生变化,如果设置成一个较大的数比如2,累加器的分辨率会减小一半。dp的值不能小于1。
  • minDist: 两个圆之间必须存在的最小距离,以便算法可以判断出它们是两个圆。
  • circles: 找到圆的输出向量。
  • param1和param2: 分别是边阈值和累加器阈值。在内部会调用Canny()进行边缘检测,param1作为Canny的参数;param2设置成param1的一半,用于累加器阈值,和HoughLines()的threshold相似。
  • minRadius 和 maxRadius : 这两个参数可以找到圆的最小、最大半径,这意味着它们是累加器能够表示的圆的半径。

返回值:圆心(x,y) 和 半径

 

import cv2
import numpy as np

img = cv2.imread('q.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)
circles = cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,10,param1=100,param2=50,minRadius=70,maxRadius=100)

print(circles)
print(circles.shape)

circles = np.uint16(np.around(circles))

for i in circles[0,:]:
    cv2.circle(img,(i[0],i[1]),i[2],(0,255,0),5) # 画圆
    cv2.circle(img,(i[0],i[1]),2,(0,255,0),3)    # 画圆心

cv2.imshow('img',img)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

补充知识点:

numpy.around(adecimals=0out=None)

将array四舍五入

  • a:传入array
  • decimal:指定小数位。默认为0
  • out:作为返回值

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值