2022-11-11 来源:华纳网 责任编辑:谷雨老师 人气:
核心提示:本课内容: 大家好,欢迎来到谷雨课堂 大家好, 本节我们来专门寻找圆, 我们本节使用 HoughCircles来进行寻找圆 以下是本节的源代码: #No.34 视觉检测之专门寻找圆 import cv2 #载入并显示图片 img=cv2.imread( yuan1.png ) cv2.imshow( img ,img) gray=cv

本课内容:

大家好,欢迎来到谷雨课堂

 

大家好,

本节我们来专门寻找圆,

我们本节使用HoughCircles来进行寻找圆

 

以下是本节的源代码:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#No.34 视觉检测之专门寻找圆import  cv2
#载入并显示图片img=cv2.imread('yuan1.png')cv2.imshow('img',img)gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#霍夫变换圆检测circles= cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,100,param1=100,param2=30,minRadius=5,maxRadius=300)
print("检测到圆的个数:",len(circles[0]))
for circle in circles[0]:
#坐标行列    x=int(circle[0])    y=int(circle[1])#半径    r=int(circle[2])
    img=cv2.circle(img,(x,y),r,(0,0,255),-1)
cv2.imshow('res',img)

cv2.waitKey(0)cv2.destroyAllWindows()
 
扩展阅读

cvHoughCircles函数,是一种计算机用语,是opencv提供的一种基于霍夫变换(Hough Transform)的找圆函数。

 

  •  
CvSeq *cvHoughCircles(CvArr *image,void *circle_storage,int method,double dp,double min_dist,double param1,double param2,int min_radius,int max_radius)

 

image:输入8bit(灰度)图像,其内容可被函数所改变

circle_storage:检测到的圆存储仓,可以是内存存储仓或者是包含圆参数的特殊类型的具有单行/单列的CV_32FC3型矩阵(CvMat*). 矩阵头为函数所修改,使得它的 cols/rows 将包含一组检测到的圆。如果 circle_storage 是矩阵,而实际圆的数目超过矩阵尺寸,那么最大可能数目的圆被返回,每个圆由三个浮点数表示:圆心坐标(x,y)和半径.).

 

method:Hough 变换方式,只支持CV_HOUGH_GRADIENT, which is basically 21HT, described in [Yuen03].

 

dp:寻找圆弧圆心的累计分辨率,这个参数允许创建一个比输入图像分辨率低的累加器。(这样做是因为有理由认为图像中存在的圆会自然降低到与图像宽高相同数量的范畴)。如果dp设置为1,则分辨率是相同的;如果设置为更大的值(比如2),累加器的分辨率受此影响会变小(此情况下为一半)。dp的值不能比1小。

 

min_dist:该参数是让算法能明显区分的两个不同圆之间的最小距离。

param1:用于Canny的边缘阀值上限,下限被置为上限的一半。

param2:累加器的阀值。

 

The second method-specific parameter. In case of CV_HOUGH_GRADIENT it is accumulator threshold at the center detection stage. The smaller it is, the more false circles may be detected. Circles, corresponding to the larger accumulator values, will be returned first.

min_radius:最小圆半径。

 

max_radius:最大圆半径。max_radius=0,max_radius值为图像最大尺寸值;max_radius<0,函数只返回圆心值,不返回半径值。





 





免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。