关闭

霍夫变换圆形检测(基于OpenCV&Python)

标签: pythonopencv圆检测cv2-HoughC霍夫变换
2203人阅读 评论(0) 收藏 举报
分类:

简述

基于python使用opencv实现在一张图片中检测出圆形,并且根据坐标和半径标记出圆。不涉及理论,只讲应用。

相关函数

函数说明:
Python: cv2.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) → circles
参数说明:

  • image- 8位,单通道,灰度输入图像。
  • circles- 找到的圆的输出向量。每个向量被编码为3元素的浮点向量 (x,y,半径)。
  • circle_storage - 在C函数中,这是一个将包含找到的圆的输出序列的内存存储。
  • method- 使用检测方法。目前,唯一实现的方法是 CV_HOUGH_GRADIENT,基本上是 21HT,在[Yuen90]中有描述 。
  • dp - 累加器分辨率与图像分辨率的反比。例如,如果 dp = 1,则累加器具有与输入图像相同的分辨率。如果 dp = 2,则累加器的宽度和高度都是一半。
  • minDist -检测到的圆的中心之间的最小距离。如果参数太小,除了真正的参数外,可能会错误地检测到多个邻居圈。如果太大,可能会错过一些圈子。
  • param1 - 第一个方法特定的参数。在CV_HOUGH_GRADIENT的情况下, 两个传递给Canny()边缘检测器的阈值较高(较小的两个小于两倍)。
  • param2 - 第二种方法参数。在CV_HOUGH_GRADIENT的情况下
    ,它是检测阶段的圆心的累加器阈值。越小,可能会检测到越多的虚假圈子。首先返回对应于较大累加器值的圈子。
  • minRadius -最小圆半径。
  • maxRadius - 最大圆半径。

这是根据opencv官方文档谷歌翻译过来的,参数比较多,但用的时候只修改一些主要的,传入的图像和最大最小圆半径,以达到检测出想要的圆的效果。
还有要注意函数的返回值

找到的圆的输出向量。每个向量被编码为3元素的浮点向量 (x,y,半径)。

这句话不是很好理解,我们直接输出返回值就会发现是个 三层嵌套list,最内层list有三个元素,分别是圆心的行,列,半径,这表示一个圆的基本信息。多个圆基本信息组成了一个新的list,这个list包含了检测到的所有圆,即长度就是检测到圆的个数。最外层再加了个list,至于干啥的不清楚了,不影响使用就好。

下图是输出函数返回值的一个实例图
这里写图片描述

实例演示

完整代码

import  cv2

#载入并显示图片
img=cv2.imread('circle.png')
cv2.imshow('img',img)
#灰度化
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#输出图像大小,方便根据图像大小调节minRadius和maxRadius
print(img.shape)
#霍夫变换圆检测
circles= cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,100,param1=100,param2=30,minRadius=5,maxRadius=300)
#输出返回值,方便查看类型
print(circles)
#输出检测到圆的个数
print(len(circles[0]))

print('-------------我是条分割线-----------------')
#根据检测到圆的信息,画出每一个圆
for circle in circles[0]:
    #圆的基本信息
    print(circle[2])
    #坐标行列
    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()

运行结果
这里写图片描述
shell输出截图
这里写图片描述

0
0
查看评论

【数字图像处理】利用霍夫变换检测圆形

Hw7_1300012710_高飙   Ø  【作业要求】 Write your own imfindcircles() to simulatematlab function imfindcircles(). The attached images are for te...
  • jsgaobiao
  • jsgaobiao
  • 2016-04-26 16:46
  • 9288

图像处理之霍夫变换圆检测算法

演示应用Hough变换检测图像中得圆,得到检测目标,详解讲述了这一算法过程 并且展示了算法运行的效果. 讨论了hough变换检测的先决条件.
  • jia20003
  • jia20003
  • 2013-12-10 23:07
  • 32132

Hough变换检测圆(附:MATLAB程序)

Hough变换的基本原理在于,利用点与线的对偶性,将图像空间的线条变为参数空间的聚集点,从而检测给定图像是否存在给定性质的曲线。圆的方程为:(x-a)^2+(y-2)^2=r^2,通过Hough变换,将图像空间对应到参数空间。附录中的MATLAB程序为网上比较常见的,实际运行中存在一些问题,这里进行...
  • mhjerry
  • mhjerry
  • 2011-12-11 21:37
  • 69221

霍夫变换检测圆形原理分析

上一篇博客中简要描述了一下自己对霍夫变换检测直线的原理理解,现在说一下检测圆形的原理。 其实检测圆形和检测直线的原理差别不大,只不过直线是在二维空间,因为y=kx+b,只有k和b两个自由度。而圆形的一般性方程表示为(x-a)²+(y-b)²=r²。那么就有三个...
  • yizhaoyanbo
  • yizhaoyanbo
  • 2017-03-01 22:49
  • 2581

Hough Transform(霍夫变换)检测Circle(圆)的几种方法

使用霍夫变换检测图像中的直线,圆等图形是利用图形函数的从直角坐标系到极坐标系的转换。 比如检测直线中,直线方程y = k * x + b  ,   直线上的所有点都对应着参数( k , b), 给定一个点(x0 , y0)我们能够得到通过这个点的所有直线的参数(k , b...
  • zkl99999
  • zkl99999
  • 2015-05-24 13:30
  • 5602

霍夫变换的圆检测原理

Hough 变换的原理 Hough 变换的原理就是利用图像全局特征将边缘像素连接起来组成区域封闭边界,它将图像空间转换到参数空间,在参数空间对点进行描述,达到检测图像边缘的目的。该方法把所有可能落在边缘上的点进行统计计算,根据对数据的统计结果确定属于边缘的程度。Hough 变换的实质就是对图像...
  • android_asp
  • android_asp
  • 2013-06-24 15:55
  • 3031

利用OpenCV霍夫变换检测出圆

利用OpenCV进行霍夫变换检测出圆形,并提取圆心坐标和半径。 程序很简单,看看就懂了。 #include using namespace cv; using namespace std; const int kvalue = 15;//双边滤波邻域大小 int main() { Mat ...
  • kh1445291129
  • kh1445291129
  • 2015-05-12 20:24
  • 3938

基于opencv利用霍夫变换实现圆形物体的检测

在http://blog.csdn.net/piaoxuezhong/article/details/58587907中对霍夫变换实现直线检测进行了汇总,这篇对霍夫变换实现圆形检测进行汇总~ 参考: http://blog.csdn.net/zhaocj/article/details/...
  • piaoxuezhong
  • piaoxuezhong
  • 2017-03-07 15:09
  • 2122

图像处理之霍夫变换圆检测算法

图像处理之霍夫变换圆检测算法 之前写过一篇文章讲述霍夫变换原理与利用霍夫变换检测直线, 结果发现访问量还是蛮 多,有点超出我的意料,很多人都留言说代码写得不好,没有注释,结构也不是很清晰,所以 我萌发了再写一篇,介绍霍夫变换圆检测算法,同时也尽量的加上详细的注释,介绍代码 结...
  • u010607947
  • u010607947
  • 2017-08-15 09:35
  • 443

图像处理之霍夫变换圆检测算法

图像处理之霍夫变换圆检测算法 之前写过一篇文章讲述霍夫变换原理与利用霍夫变换检测直线, 结果发现访问量还是蛮 多,有点超出我的意料,很多人都留言说代码写得不好,没有注释,结构也不是很清晰,所以 我萌发了再写一篇,介绍霍夫变换圆检测算法,同时也尽量的加上详细的注释,介绍代码 结构.让更多的人能...
  • u011600592
  • u011600592
  • 2017-07-14 16:36
  • 506
    个人资料
    • 访问:24818次
    • 积分:449
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:0篇
    • 译文:0篇
    • 评论:42条
    文章分类
    最新评论