OpenCV 圆检测

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()

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

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

本文分享自微信公众号 - Python编程 pyqt matplotlib(wsplovePython),作者:wsp001

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OpenCV 读写视频

    下面是完整的代码,里面额外添加了一些边缘检测,求帧差,镜像,添加文字等功能。(上传的动图像素差是腾讯的锅,压缩得太厉害)

    用户6021899
  • OpenCV 直线检测

    OpenCV 中的 HoughLines() 和 HoughLinesP() 函数用来检测直线。它们的差别是第一个函数使用标准的 Hough 变换,第二个函数使...

    用户6021899
  • pyzbar 二维码、条形码识别

    利用python的第三方模块 pyzbar 可以很方便的进行二维码的识别(也能识别条形码,用法别无二致)。

    用户6021899
  • 如何采用Python读取一个图像

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    于小勇
  • OpenCV 系列教程2 - Core 组件

    若是单通道的像素,像素有 256(0-255)个值,若是三通道,则颜色数就更多(一千六百多万种),如此多的颜色进行处理,会对算法的性能造成影响。这些颜色中,有代...

    机器视觉CV
  • python下使用cv2.drawContours填充轮廓颜色

    在使用cv2.drawContours进行轮廓的颜色填充时要注意一点: (1)颜色填充时:给其传参数的时候,需要搞一个轮廓的list给他,要不会导致颜色填充失败...

    MachineLP
  • Python+OpenCV的环境安装

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机...

    菲宇
  • Android SurfaceView游戏开发示例

    当我们需要开发一个复杂游戏的时候,而且对程序的执行效率要求很高时,View类就不能满足需求了,这时必须用SurfaceView类进行开发。

    阳光岛主
  • Apache Kylin在美团数十亿数据OLAP场景下的实践

    本文根据2016年4月北京Apache Kylin Meetup上的分享讲稿整理,略有删节。

    高广超
  • Kylin 新定位:分析型数据仓库

    Apache Kylin 在 2014 年 10 月开源并加入 Apache 软件基金会的孵化器,一年后从孵化器毕业成为 Apache 顶级项目。从第一天起,K...

    大数据技术架构

扫码关注云+社区

领取腾讯云代金券