我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python opencv进行圆形识别(圆检测)实例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python opencv进行圆形识别(圆检测)实例代码

前言

圆形识别(圆检测)是图像识别中很常见的一种处理方式,最核心的是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 = 400
x1 = 560
y1 = 200
x2 = x1+size
y2 = y1+size
cut = 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 完整代码和示例图像

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

总结

到此这篇关于Python opencv进行圆形识别(圆检测)的文章就介绍到这了,更多相关opencv圆形识别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python opencv进行圆形识别(圆检测)实例代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python opencv进行圆形识别(圆检测)实例代码

最近工作的项目上需要检测图像中是否有圆形,下面这篇文章主要给大家介绍了关于Python opencv进行圆形识别(圆检测)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-05-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录