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

news/2024/7/21 6:28:53 标签: opencv, python, 计算机视觉, 圆检测, 图像处理

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

1 读入图像

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

python">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 图像预处理

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

裁切

python">size = 400
x1 = 560
y1 = 200
x2 = x1+size
y2 = y1+size
cut = img[y1:y2, x1:x2]

滤波加二值化

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

显示中间处理过程

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

python">cv2.imshow("img", img)
cv2.imshow("cut", cut)
cv2.imshow("numpy_img", numpy_img)
cv2.waitKey(0)

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

3 圆形识别

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

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

4 显示检测结果

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

python">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 完整代码和示例图像

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


http://www.niftyadmin.cn/n/81526.html

相关文章

JSR303基本使用以及整合springboot统一异常处理

目录 一、前言 什么是JSR303 二、JSR303基本使用(普通使用) 1)、引入jar包 2)、实体类对需要校验的数据进行校验 3)、对前端传递过来的参数进行限制 三、JSR303基本使用(分组校验) 1)、创建分组 2)…

虹科新闻 | 虹科与b-plus正式建立合作伙伴关系,共同致力于用于ADAS/AD系统开发的VV测量解决方案

虹科b-plus 携手共创未来! 近期,虹科与德国b-plus正式建立合作伙伴关系。未来,虹科与b-plus将共同致力于提供用于ADAS/AD系统开发的V&V测量解决方案。 合作寄语 虹科CEO陈秋苑女士表示:“虹科非常期待与b-plus合作&#x…

爱创科技行业观察:中药全链条监管进入新阶段!

中药材用途广泛,具有食品、药品、化妆品等多重属性,中药材及饮片是中医药的重要组成部分,是中药研发和生产的源头,也是中医药事业发展的物质基础,其质量是中药新药质量的关键影响因素,但在中药材标准引用方…

【Redis】 数据结构:SDS、跳跃表等底层数据结构详解

【Redis】 数据结构:SDS、跳跃表等底层数据结构详解 文章目录【Redis】 数据结构:SDS、跳跃表等底层数据结构详解底层数据结构引入Redis数据结构 - 动态字符串 SDSSDS 概述SDS动态扩容为什么使用SDS小结Redis数据结构 - 整数集 intsetIntSet概述内存布局…

原画培训机构排名前十名,最新10大原画培训机构

原画培训机构排名出来啦,最新10大原画培训机构出炉,快来看看游戏原画培训机构有哪些吧,对于不知道如何选择靠谱的原画培训班,可以借鉴和参考一下! 1、轻微课 国内人气很高的板绘学习平台,主打课程有日系插…

爬虫基本知识的认知(爬虫流程 HTTP构建)| 爬虫理论课,附赠三体案例

爬虫是指通过程序自动化地从互联网上获取数据的过程。 基本的爬虫流程可以概括为以下几个步骤: 发送 HTTP 请求:通过 HTTP 协议向指定的 URL 发送请求,获取对应的 HTML 页面。解析 HTML 页面:使用 HTML 解析器对获取的 HTML 页面…

华为OD机试题 - 去除多余空格(JavaScript)| 代码+思路+重要知识点

最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 使用说明 参加华为od机试,一定要注意不要完全背…

MyBatis基本使用

一、简介 MyBatis 中文文档 https://mybatis.org/mybatis-3/zh/index.html 1.什么是 MyBatis 概述:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBa…