目录
1. 目的
记录使用python学写霍夫圆检测的过程
2. 霍夫园检测的原理
略!别怪我,这个涉及到数学原理。有时间我再进行补充,我们先会用。(绝对不是我不懂哦。嘻嘻嘻)
3. 使用opencv测试
先用一张很标准的图来测试下,我直接在ptp上画的一张图:
import cv2 as cv
import numpy as np
#读取文件
origin = cv.imread('images/origin3.png', 1)
img = cv.imread('images/origin3.png', 0)
#霍夫圆检测
circles = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1, 100, param1=50, param2=30, minRadius=0, maxRadius=100)
circles = np.uint16(np.around(circles))
#将检测到的圆圈标上去
for i in circles[0, :]: # 遍历矩阵每一行的数据
cv.circle(origin, (i[0], i[1]), i[2], (0, 255, 0), 2)
cv.circle(origin, (i[0], i[1]), 2, (0, 0, 255), 3)
#显示图像
cv.imshow("image", origin)
cv.waitKey(0)
cv.destroyAllWindows()
识别效果很完美:
在用一张随意点的图:
调节了下param1和param2以及半径的参数:
import cv2 as cv
import numpy as np
#读取文件
origin = cv.imread('images/origin1.png', 1)
img = cv.imread('images/origin1.png', 0)
# cv.imshow("image", origin)
# cv.waitKey(0)
#霍夫圆检测
circles = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1, 13, param1=50, param2=18, minRadius=0, maxRadius=20)
circles = np.uint16(np.around(circles))
#将检测到的圆圈标上去
for i in circles[0, :]: # 遍历矩阵每一行的数据
cv.circle(origin, (i[0], i[1]), i[2], (0, 255, 0), 2)
cv.circle(origin, (i[0], i[1]), 2, (0, 0, 255), 3)
#显示图像
cv.imshow("image", origin)
cv.waitKey(0)
cv.destroyAllWindows()
多识别出了两个点,这两个点的半径比较小,那就很好处理了。直接设定minRadio进行控制
circles = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1, 13, param1=50, param2=18, minRadius=15, maxRadius=20)
最后结果:(检测效果还是很好的)
感谢大家查阅,有任何问题都可以在评论去评论哦。