前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV 圆检测

OpenCV 圆检测

作者头像
用户6021899
发布2019-09-08 21:26:41
2.1K0
发布2019-09-08 21:26:41
举报

OpenCV 的 HoughCircles() 函数可以用来在一张单通道图像里检测圆形物体。下面是各参数的介绍:

HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) -> circles

image为单通道图像。若是彩图,须先转化为灰度图,或只取某单个颜色通道。

method 定义检测图像中圆的方法。目前唯一实现是cv2.HOUGH_GRADIENT

dp:累加器分辨率与图像分辨率的反比。dp取值越大,累加器数组越小。

minDist:检测到的各个圆的中心坐标之间的最小距离(以像素为单位)。如果过小,可能检测到多个相邻的圆。反之,过大则可能导致很多圆检测不到。

param1:用于处理边缘检测的梯度值方法。

param2:cv2.HOUGH_GRADIENT方法的累加器阈值。阈值越小,能检测到的圆越多。

minRadius:半径的最小值(以像素为单位)。

maxRadius:半径的最大值(以像素为单位)。

下面以这张气球串的照片为例进行讲解。

我们需要先将其转为灰度图,再模糊降噪:

import cv2  img0 = cv2.imread('1.png')print(img0.shape)cv2.imshow("Original image", img0)gray = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY)#转灰度图cimg = cv2.medianBlur(gray, 3)#模糊降噪cv2.imshow("Cimg", cimg)

降噪后的灰度图:

最后进行圆检测:

#HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) -> circles # image须是灰度图circles = cv2.HoughCircles(cimg, cv2.HOUGH_GRADIENT,1,20,                           param1=3,param2=40,minRadius=5,maxRadius=40)if circles is not None:    for (cx,cy, r) in circles[0, :]:        print(cx,cy,"  ", r) # 圆心x坐标,y坐标,和圆半径(注意都是浮点数!)        cv2.circle(img0, (cx, cy), r, (255,0,0), 2) #画圆cv2.imshow("detection", img0)cv2.waitKey()cv2.destroyAllWindows()

检测结果如下,效果还不错。

圆心坐标和圆半径的数据:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档