十六、霍夫圆形检测

一、获取圆形检测原理

十六、霍夫圆形检测
十六、霍夫圆形检测
十六、霍夫圆形检测

很明显的看出较亮的点为圆心,然后通过半径进行绘制出圆。

二、实现步骤

由于霍夫圆检测对噪声比较明显,故需要首先对图像进行滤波操作(中值滤波等)
霍夫圆形检测是基于图像梯度实现的,分为两步:
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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球