返回顶部
首页 > 资讯 > 后端开发 > Python >Python opencv进行圆形识别(圆检测)
  • 546
分享到

Python opencv进行圆形识别(圆检测)

opencvpython计算机视觉圆检测图像处理 2023-09-02 12:09:26 546人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

圆形识别(圆检测)是图像识别中很常见的一种处理方式,最核心的是cv2.HoughCircles这个函数实现的圆形检测。当然还有一些其他的处理过程,以下详述: 1 读入图像 首先需要读取一个图像文件,将

圆形识别(圆检测)是图像识别中很常见的一种处理方式,最核心的是cv2.HoughCircles这个函数实现的圆形检测。当然还有一些其他的处理过程,以下详述:

1 读入图像

首先需要读取一个图像文件,将其作为一个变量

img = cv2.imread("save1.jpg", 0)     # 0或者cv2.IMREAD_GRAYSCALE  读取为灰度图像img2 = cv2.imread("save1.jpg", 1)     # 1或者cv2.IMREAD_COLOR 读取为为彩色图像

img是一个ndarray,2维结构,包含的是灰度化后的图像信息
img2是一个ndarray,3维结构,包含的是RGB彩色图像信息,比img2多出一个色彩维度
如下图,img2是3个方括号“[”
在这里插入图片描述

2 图像预处理

可以对图像进行裁切,滤波等处理,当然不处理也可以直接用,以下展示一下:

裁切

size = 400x1 = 560y1 = 200x2 = x1+sizey2 = y1+sizecut = img[y1:y2, x1:x2]

滤波加二值化

numpy_img = cv2.adaptiveThreshold(cut, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 15)   # 自动阈值二值化

显示中间处理过程

有时候我们需要直观的看到中间处理过程的图像样貌,可以随时显示

cv2.imshow("img", img)cv2.imshow("cut", cut)cv2.imshow("numpy_img", numpy_img)cv2.waiTKEy(0)

注意imshow函数,第一个参数是要显示的窗口的标题,不得用中文和中文标点,必须全英文,否则会乱码,第2个参数是待显示的图像变量
最后一行可以没有,如果有的话,程序会在此等待,直到有按键动作,程序才继续往后运行。这对我们调试比较有用。

3 圆形识别

#                          圆心距 canny阈值    投票数      最小半径       最大半径circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 170,   param1=100, param2=60,  minRadius=60, maxRadius=90)

大概讲一下重要的几个参数,参数与实际的图像尺寸相关,不是一个参数用所有的图
圆心距:170 圆心距小于此值的圆不检测,以减小计算量
canny阈值:图像二值化的参数,根据实际情况调整
投票数:一个圆需要至少包含多少个点,才认为这是一个圆
最小半径,最大半径:在此值之间的圆才是需要的圆,超过范围不检测,以减小计算量
检测完的结果保存在circles 中
可以自己调整参数以观察结果

4 显示检测结果

没啥好说的,代码很简单,就是对于每个结果画出圆和圆心

arr1 = np.zeros([0, 2], dtype=int)                      # 创建一个0行, 2列的空数组if circles is not None:    circles = np.uint16(np.around(circles))   # 4舍5入, 然后转为uint16    for i in circles[0, :]:        arr1 = np.append(arr1, (i[0], i[1]))            # arr1是圆心坐标的np数组        # print(arr1)        cv2.circle(img2, (i[0], i[1]), i[2], (0, 0, 255), 3)  # 轮廓        cv2.circle(img2, (i[0], i[1]), 2, (0, 0, 0), 6)     # 圆心

在这里插入图片描述

5 完整代码和示例图像

可以在这里下载:示例代码下载

来源地址:https://blog.csdn.net/13011803189/article/details/129021761

--结束END--

本文标题: Python opencv进行圆形识别(圆检测)

本文链接: https://lsjlt.com/news/390725.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作