opencv-python实战项目十:二维码识别

news2024/12/26 0:08:42

文章目录

  • 一:简介
  • 二:opencv二维码识别流程
  • 三:整体代码
  • 四:效果


一:简介

二维码识别是一种利用图像处理技术,从数字图像中提取并解析二维码信息的过程。该技术广泛应用于信息快速交换、移动支付、产品追踪等领域。通过专业算法对图像进行预处理、定位、采样和解码,实现高效准确的二维码内容读取,为现代社会提供了极大的便利。

二:opencv二维码识别流程

OpenCV二维码识别流程包括以下步骤:首先,图像导入,即加载包含二维码的图像文件或从摄像头捕获实时图像;接着进行图像预处理,通过灰度化和二值化等操作减少噪声、提高对比度;随后,使用cv2.QRCodeDetector进行二维码检测,确定图像中的二维码位置和角度;然后,从检测到的二维码中提取编码的数据;最后,在原始图像上绘制二维码边界框,并展示或输出解析得到的数据。下面介绍一下cv2.QRCodeDetector。
cv2.QRCodeDetector 是 OpenCV 库中专门用于检测和解析 QR 码(二维码)的类。它的核心方法 detectAndDecode 提供了便捷的接口,用于处理包含二维码的图像。该方法能够识别图像中的二维码,并返回二维码包含的数据、边界框的坐标位置以及经过矫正的二维码图像。通过这一系列步骤,开发者可以轻松地从图像中提取和利用二维码中的信息。
detectAndDecode方法以一个图像作为输入,并返回三个值:

data:
○ 类型:字符串
○ 描述:这是二维码中包含的实际数据。如果二维码被成功识别,这个字符串将包含二维码编码的信息。如果二维码没有被识别,这个值将为空字符串。
bbox:
○ 类型:numpy.ndarray
○ 描述:这是一个二维数组,表示二维码的边界框坐标。如果二维码被成功识别,这个数组将包含四个点的坐标,这四个点定义了二维码的四个角。每个点是一个 (x, y) 坐标对。数组的形状通常是 (1, 4, 2),其中:
第一个维度表示检测到的二维码数量(通常只有一个)。
第二个维度表示四个角点。
第三个维度表示每个点的 x 和 y 坐标。
如果没有检测到二维码,bbox 将是 None。
straight_qrcode:
○ 类型:numpy.ndarray
○ 描述:这是一个二维数组,表示检测到的二维码的矫正图像。如果二维码被成功识别,这个数组将包含一个灰度图像,它是二维码的矫正版本,可以用于进一步的识别或处理。如果没有检测到二维码,straight_qrcode 将是 None。

使用代码:

img = cv2.imread(r'F:\traditional_vison\1.jpg')
# 检测并解码二维码
data, bbox, straight_qrcode = qrDecoder.detectAndDecode(img)

三:整体代码

import cv2

# 初始化 QRCode 检测器
qrDecoder = cv2.QRCodeDetector()

# 读取图像
img = cv2.imread(r'F:\traditional_vison\1.jpg')

# 检测并解码二维码
data, bbox, straight_qrcode = qrDecoder.detectAndDecode(img)
if bbox is not None and len(bbox) > 0 and len(bbox[0]) == 4:
    # 提取第一个二维码的四个角点
    points = bbox[0]
    # 使用第一个点作为左上角,第三个点作为右下角
    top_left = (int(points[0][0]), int(points[0][1]))
    bottom_right = (int(points[2][0]), int(points[2][1]))

    # 在图像上绘制矩形
    cv2.rectangle(img, top_left, bottom_right, (0, 255, 0), 2)
    # 在图像上绘制二维码数据
    # 设置文本位置(在矩形框的上方)
    text_position = (top_left[0], top_left[1] - 10)
    # 设置文本字体
    font = cv2.FONT_HERSHEY_SIMPLEX
    # 设置字体大小和颜色
    font_scale = 0.5
    font_color = (0, 0, 255)  # 红色
    # 设置文本厚度
    thickness = 1
    # 绘制文本
    cv2.putText(img, data, text_position, font, font_scale, font_color, thickness)

# 显示图像
cv2.imshow("Image with QR Code", img)
cv2.waitKey(0)

四:效果

原图:

处理后的图:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2043853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud的能源管理系统-能源管理平台源码

介绍 基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码 软件架构

MySQL的InnoDB存储引擎中的Buffer Pool机制

目录 Buffer Pool 简介 定义 为什么需要Buffer Pool 图解重点知识 Buffer Pool 的组成 数据页(Data Pages) 索引页(Index Pages) 插入缓冲页(Insert Buffer Pages) undo页(Undo Pages&a…

idea鼠标悬浮显示注释

鼠标悬停在代码上的时候会出现快速文档,如下图,这里介绍下如何去除快速文档的显示 2020版本之前 依次找到 File—>Settings—>Editor—>General 去掉勾选 Show quick documentation on mouse move 2020版本之后 依次找到 File—>Settings…

Python数据可视化案例——地图

目录 简单案例: 进阶案例: 继上文数据可视化案例,今天学习用pyecharts练习数据可视化案例2-构建地图。 简单案例: 首先构建一个简单的地图。 代码: import json from pyecharts.charts import MapmapMap() data[…

什么反人类设计?

一、什么反人类设计? 反人类设计,也被称为“诺曼”,是由美国心理学家唐纳德A诺曼提出的概念,指的是那些设计不佳、不利于用户使用的物品。这类设计的特点通常包括不符合人体工学原理、与日常认知和惯性思维相悖。在日常生活中&…

OpenCV图像滤波(13)均值迁移滤波函数pyrMeanShiftFiltering()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 函数执行均值迁移图像分割的初始步骤。 该函数实现了均值迁移分割的过滤阶段,即输出是经过滤波的“海报化”图像,其中颜色…

Java 垃圾回收,看一遍就懂

了解 Java 垃圾收集的工作原理并优化应用程序中的内存使用情况。详细了解 Java 中内存管理的复杂性。 垃圾收集是一个关键过程,可以帮助任何Java 开发公司。编程语言中的这一强大功能可以巧妙地管理内存分配和释放,防止内存泄漏并优化资源利用率。它就像…

pytorch库 04 神经网络代码基础

文章目录 一、神经网络基本骨架 nn.Module二、卷积层三、池化层四、非线性激活层五、线性层六、模型搭建小练习:CIFAR 10 model 结构七、损失函数与反向传播八、优化器九、现有网络模型的使用与修改十、网络模型的保存与读取十一、一个完整模型训练套路十二、GPU加速…

arm体系结构(1)

一 RAM: 随机存储(主存储器) 速度快、掉电数据丢失 ROM: 只读存储(辅助存储器) 速度慢、掉电数据不丢失 RAM SRAM DRAM SDRAM DDR2、3、4、5 静态 动态 同步 ROM PROM EPROM EEPROM 可编程 可擦除 电可擦可编程 flash:结合RAM和ROM的优点,快、掉…

Visual Studio 2022 LNK2001无法解析的外部符号 _wcscat_s 问题记录

ANSI C程序中,用到了wcsrchr、wcsncpy_s、wcscat_s、wcscpy_s等几个字符串函数,但是编译时提示: 错误 LNK2001 无法解析的外部符号 _wcscat_s 查了挺多帖子,没有解决。 https://bbs.csdn.net/topics/250012844 解决VS编译…

Python青少年简明教程:为何学习Python编程语言及Python编程环境搭建

Python青少年简明教程:为何学习Python编程语言及Python编程环境搭建 我们写给他人看的文章,使用类语言。人类语言有很多种如汉语,英语,法语等等。 而写给 计算机 执行的 程序文件 ,必须使用 编程语言 , 因…

Java 集成测试详解及示例

通过综合指南探索 Java 集成测试的世界。了解工具、流程和最佳实践,并辅以实际示例。 随着软件系统变得越来越大、越来越复杂,组件和服务以错综复杂的方式交互,集成测试已变得不可或缺。通过验证所有组件和模块在组合时是否正常工作&#xff…

三级_网络技术_27_计算机网络环境及应用系统的安装与调试

1.对于频繁改变位置并使用DHCP获取PP地址的DNS客户端,为减少对其资源记录的手动管理,可采取的措施是()。 允许动态更新 使用反向查找区域 增加别名记录 设置较小的生存时间 2.下列Windows 2003系统命令中,可以清空DNS缓存(DNScache)的是…

在Ubuntu上有什么命令,或者是系统文件能告诉我链接nvme ssd的pcie槽位是不是支持热插拔功能?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

打靶记录11——Billu_b0x

靶机: https://download.vulnhub.com/billu/Billu_b0x.zip难度: 中(两种攻击路线) 目标: 取得root权限 涉及的攻击方法: 主机发现端口扫描Web信息收集SQL注入(Sqlmap跑不出来)…

Spring Boot 3.3 【四】Spring Boot 整合JPA

🌟 技术人聊管理 请关注 【技术管理修行】 一、JPA 简介 Spring Data JPA 是 Spring Data 项目的一部分,它为使用 Java Persistence API (JPA) 进行数据库访问提供了一种非常简便的方式。Spring Data JPA 的主要目的是简化基于 JPA 的数据访问层的开发工…

leetCode - - - 栈和队列

目录 1.有效的括号( LeetCode 20 ) 2.最小栈( LeetCode 155 ) 3.接雨水( LeetCode 42 ) 4.逆波兰表达式求值(LeetCode 150) 5.柱状图中最大的矩形(LeetCode 84&…

SAP LE学习笔记02 - WM和库存管理(IM)之间的关系,保管Lot(Quant)

上一章学习了LE的基础知识。 1,LE的概述,LE里面包含下面3个大的模块 - LE-WM 仓库管理 / - LE-SHP 发货/ - LE-TRA 运输 2,仓库的结构 - 仓库番号 / -保管域Type(存储区域)/ - 保管区画(存储区)/ - 棚番(Storage Bin 仓位&…

IDEA快捷键(Ctrl + tab)非常好用 切换最近使用的编辑器选项卡

文章目录 1、为什么要使用 ctrl tab 快捷键?2、使用 ctrl tab 快捷键 1、为什么要使用 ctrl tab 快捷键? 当我们点击 ctrl alt 鼠标左键点击 进入方法的实现时,这个时候我们会在这个实现类中不断的点击,查看源码&#xff0c…

【安全工具推荐-Search_Viewer资产测绘】

目录 一、工具介绍 二、工具配置 三、传送门 一、工具介绍 Search_Viewer,集Fofa、Hunter鹰图、Shodan、360 quake、Zoomeye 钟馗之眼、censys 为一体的空间测绘gui图形界面化工具,支持一键采集爬取和导出fofa、shodan等数据,方便快捷查看…