0
点赞
收藏
分享

微信扫一扫

十六、霍夫圆形检测

_阿瑶 2022-04-04 阅读 145
pythonOpenCV

一、获取圆形检测原理

原图如下:在这里插入图片描述
选取一个圆的任意点设定为圆形进行绘制圆形,交与一点在这里插入图片描述
再将平面直角坐标系上的各点,通过公式在这里插入图片描述转到极坐标上
很明显的看出较亮的点为圆心,然后通过半径进行绘制出圆。

二、实现步骤

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

效果图如下:
在这里插入图片描述

举报

相关推荐

0 条评论