icp备案系统网站,深圳装修设计公司排名前十强,化工行业网站设计,seo建设者文章目录 简介代码HoughCircles函数说明 简介
opencv中提供了基于霍夫变换的圆形检测方法#xff0c;可实现下图所示的检测结果。 其中#xff0c;【gray】是经过均值滤波的灰度图#xff0c;其目的是将目标边缘凸显出来#xff1b;【edge】是通过Canny边缘检测得到的灰度… 文章目录 简介代码HoughCircles函数说明 简介
opencv中提供了基于霍夫变换的圆形检测方法可实现下图所示的检测结果。 其中【gray】是经过均值滤波的灰度图其目的是将目标边缘凸显出来【edge】是通过Canny边缘检测得到的灰度图像的边缘【circles】即原始图像和检测到的圆形的叠加图。
代码
其实现代码如下。
import matplotlib.pyplot as plt
import numpy as np
import cv2 as cvpath coins.pngimgs {}
img cv.imread(path, cv.IMREAD_COLOR)
gray cv.cvtColor(img, cv.COLOR_BGR2GRAY)imgs[gray] cv.medianBlur(gray, 25)
imgs[edge] cv.Canny(imgs[gray],100,200)rows gray.shape[0]
circles cv.HoughCircles(imgs[gray], cv.HOUGH_GRADIENT,1, rows / 8, param1100, param230,minRadius1, maxRadius300)其中【circles】就是检测到的圆形参数其实质是由 x , y , r x,y,r x,y,r组成的三元组的列表。
接下来是绘图在circles子图中先绘制了原始图像然后根据圆形的参数方程 x r cos θ , y r sin θ xr\cos\theta, y r\sin\theta xrcosθ,yrsinθ来描绘出圆形的边缘。
imgs[circles] img
for i,key in enumerate(imgs,1):ax plt.subplot(1,3,i)plt.title(key)plt.imshow(imgs[key])plt.axis(off)th np.deg2rad(np.arange(361))
for x,y,r in circles[0]:xs x r*np.cos(th)ys y r*np.sin(th)plt.scatter(x, y, marker*, colorred)plt.plot(xs, ys, colorred)plt.show()HoughCircles函数说明
【HoughCircles】是opencv提供的基于霍夫变换的圆形检测工具。
函数参数说明
image: 输入的灰度图像通常使用cv2.imread函数加载。method: 检测圆的方法。dp: 用于控制霍夫变换的分辨率值越大检测的圆越少但越准确。minDist: 圆心之间的最小距离。param1: 边缘检测时使用Canny算子的高阈值低阈值是高阈值的一半param2: 用于圆心检测的参数。minRadius, maxRadius: 圆半径的最小值和最大值。
其中opencv通提供了四种检测圆的方法其method参数可选值如下
【cv2.HOUGH_GRADIENT】霍夫梯度法是OpenCV中最常用的圆检测方法通过计算图像中的梯度来确定圆心的可能位置然后对这些位置进行投票以确定真实的圆心。这种方法的问题是对噪声敏感。【cv2.HOUGH_GRADIENT_ALT】霍夫梯度法的另一种实现。【cv2.HOUGH_PROBABILISTIC】概率霍夫变换与霍夫梯度法的区别是并不通过全局投票来确定圆心并检查一些候选点是否符合圆的方程它通常会产生较少的假阳性结果但可能检测不到某些圆。【cv2.HOUGH_MULTI_SCALE】多尺度霍夫变换将在不同尺度上应用霍夫变换对缩放、旋转和倾斜变化具有更好的鲁棒性。和其他方法相比该方法可能会检测到更多的圆但也更吃计算资源。