Opencv学习项目4——pyzbar

 Pyzbar介绍

Pyzbar 是一个用于解码条形码和二维码的 Python 库。它是基于 ZBar 条形码扫描器库的 Python 绑定,支持多种条形码格式,包括 QR 码、EAN-13、UPC-A、Code 128 等。

Pyzbar 的主要功能

  • 解码多种类型的条形码和二维码:支持包括 QR 码、EAN-13、UPC-A、Code 128 在内的多种条形码格式。
  • 多平台支持:Pyzbar 可以在 Windows、macOS 和 Linux 上运行。
  • 易于集成:Pyzbar 可以很容易地与 OpenCV 等其他图像处理库结合使用,从而实现实时条形码和二维码检测。

核心函数

  • decode(image, symbols=None): 该函数用于解码图像中的条形码和二维码。
    • image: 要解码的图像,可以是 numpy 数组或者 PIL 图像。
    • symbols: 可选参数,指定需要解码的条形码类型列表。如果不指定,则解码所有支持的类型。

解码结果

decode 函数返回一个包含解码结果的列表,每个解码结果对象包含以下属性:

  • data: 解码后的数据,类型为字节串。
  • type: 条形码类型(如 'QRCODE', 'EAN13')。
  • rect: 包含条形码的矩形区域(左上角 x, 左上角 y, 宽度, 高度)。
  • polygon: 条形码的多边形顶点列表。

Pyzbar 是一个强大且易于使用的库,对于需要在图像中识别和解码条形码和二维码的任务非常有用。

 代码实现

import cv2
from pyzbar.pyzbar import  decodeimg = cv2.imread('qrcode.png')
himg, wimg, _ = img.shape
# 解码图像中的二维码
for barcode in decode(img):mydata = barcode.data.decode()print(mydata)cv2.imshow('Result', img)
cv2.waitKey(0)

其中,img 是包含条形码的图像对象。在每次迭代中,通过 decode 函数解码图像中的一个条形码。然后,使用 data 属性获取解码结果,并调用 decode 方法将其转换为字符串格式。最后,将解码得到的数据打印输出。

 

这样即可解出这个QR码的内容,接下来我们给这个二维码框出并标上相应的字符串

import cv2
from pyzbar.pyzbar import  decodeimg = cv2.imread('qrcode.png')
himg, wimg, _ = img.shape
# 解码图像中的二维码
for barcode in decode(img):mydata = barcode.data.decode()print(mydata)# 获取条形码的矩形边界rect = barcode.rect# 绘制矩形边界框cv2.rectangle(img, (rect.left, rect.top), (rect.left + rect.width, rect.top + rect.height), (0, 0,255), 3)cv2.putText(img, mydata, (rect.left,rect.top  - 10), cv2.FONT_HERSHEY_COMPLEX,0.8, (0,0,255), 2)cv2.imshow('Result', img)
cv2.waitKey(0)

在使用 pyzbar 库解码图像中的条形码时,每个解码得到的条形码对象(Decoded 对象)都会包含一个 rect 属性。这个属性提供了条形码在图像中的矩形边界框信息。

rect 属性详解

rect 属性是一个命名元组(namedtuple),包含以下四个字段:

  • left: 矩形边界框的左侧 x 坐标。
  • top: 矩形边界框的上侧 y 坐标。
  • width: 矩形边界框的宽度。
  • height: 矩形边界框的高度。

 效果演示 

这样就完成了,感兴趣的可以点个关注,一起学习,谢谢

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

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

相关文章

前端构建工具其配置过程

前端构建工具(如Webpack、Rollup等)其配置过程。 前端构建工具,如Webpack和Rollup,是用于管理和优化前端项目模块化结构的工具。它们的主要任务是打包代码,压缩资源,处理依赖,以及实现模块化的…

Python: HexBinDecOct

因为: f0b1001110# 十进制 int()a0*2**01*2**11*2**21*2**30*2**40*2**51*2**6print(a)# 八进制 oct()print(78/8,78%8)# 110 001 001 8 116print(1*2**00*2**10*2**2,1*2**00*2**10*2**2,0*2**01*2**11*2**2)#十六进制 hex()#0 100 1110 16 4Eprint(sixteenFoo(0*…

SpringCloud微服务框架的原理及应用详解(四)

本系列文章简介: 随着云计算、大数据和物联网等技术的飞速发展,企业应用系统的规模和复杂度不断增加,传统的单体架构已经难以满足快速迭代、高并发、高可用性等现代业务需求。在这样的背景下,微服务架构应运而生,成为了…

汉语拼音字母表 (声母表和韵母表)

汉语拼音字母表 [声母表和韵母表] 1. 汉语拼音声母表2. 汉语拼音韵母表References 1. 汉语拼音声母表 声母是韵母前的辅音,与韵母一起构成一个完整的音节。 辅音是发声时,气流在口腔中受到各种阻碍所产生的声音,发音的过程即是气流受阻和克…

Python中的交互式GUI开发:与MATLAB uicontrol的比较

Python中的交互式GUI开发 Python中的交互式GUI开发:与MATLAB uicontrol的比较**Python GUI开发库****Tkinter****PyQt/PySide** **与MATLAB的比较****总结** Python中的交互式GUI开发:与MATLAB uicontrol的比较 在MATLAB中,uicontrol 是一个…

ubuntu设置第三方库环境变量

首先打开~/.bashrc配置文件 sudo gedit ~/.bashrc打开后文末添加,/xxx改成你库文件的路径 export LD_LIBRARY_PATH/xxx:$LD_LIBRARY_PATH 记住最最最重要的事情source一下 source ~/.bashrc 具体了解.bashrc配置文件的,可以看看 .bashrc

【设计模式之访问者模式 -- C++】

访问者模式 – 操作对象,分离算法 访问者模式(Visitor Pattern)是一种将算法与对象结构分离的设计模式。这种模式主要用于操作一个由许多对象构成的复杂对象结构,它能够在不修改这些对象的类的前提下定义作用于这些对象的新操作。…

Linux信号量机制总结与实例解析

目录 第一章:Linux信号量基础 1.1 信号量概念 1.2 信号量类型 1.3 信号量操作 1.4 实战案例:信号量在多线程同步中的应用 1.5 实战案例:信号量在进程间同步中的应用 第二章:Linux信号量高级应用 2.1 信号量与实时操作系统 …

2024年6月大众点评成都餐饮店铺POI分析22万家

2024年6月大众点评成都餐饮店铺POI共有221002家 店铺POI点位示例: 店铺id CACuqlcUQApLA7Ki 店铺名称 峨眉山豆腐脑(百吉街店) 十分制服务评分 7.3 十分制环境评分 7.5 十分制划算评分 7.1 人均价格 18 评价数量 38 店铺地址 百吉街86号1层 大类 美食 中类…

关于edge浏览器注册Kaggle不显示验证部分的问题

使用edge注册kaggle没有显示验证的部分导致无法完成注册 法一 谷歌大法好,使用谷歌注册就么有问题,然鹅需要魔法上网。 法二 使用 edge的Header Editor的插件 收到邮件后填写即可 参考博客: Kaggle平台注册弹不出验证码怎么办&#…

聊聊Vue中的Router(路由)

Vue构造的是一个单页面应用 在 Vue 中,router(路由)用于定义应用的不同页面路径和组件之间的映射关系,通过路由从而实现页面的切换和导航功能 vue中所有的xxx.vue文件,都是路由组件,这些组件都会被vue读取…

【物联网】NB-IoT

目录 一、什么是NBIOT 二、NB-IoT的特点 三、NBIOT的工作状态 四、移远NB-IoT模块及AT指令 一、什么是NBIOT NB-IoT(Narrow Band Internet of Things)窄带物联网,构建于蜂窝网络,所占用的带宽很窄,只需约180KHz&am…

基于NURBS曲线的数据拟合算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1NURBS曲线基础 4.2 数据拟合原理 5.完整程序 1.程序功能描述 基于NURBS曲线的数据拟合算法,非均匀有理B样条(Non-Uniform Rational B-Splines,简称NURBS&#xf…

rapidjson源码解析

基础组件 #mermaid-svg-HpR2Zha3TK2OHfEW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HpR2Zha3TK2OHfEW .error-icon{fill:#552222;}#mermaid-svg-HpR2Zha3TK2OHfEW .error-text{fill:#552222;stroke:#552222;}#…

史上最强面试题,拿大厂京东,阿里offer全靠它。程序员必看。

答:对于short s1 1; s1 s1 1;由于1是int类型,因此s11运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 1; s1 1;可以正确编译,因为s1 1;相当于s1 (short)(s1 1);其中有隐含的强制类型转换。 #6、Java 有…

Java学习 (二)关键字、标识符、数组

一、关键字 我们第一章案例中有很多关键字,比如class、public、static、void等,这些关键字依旧被java定义好了,可以拿来用,不需要死记硬背,按照官方文档查询即可 #官方文档 https://docs.oracle.com/javase/tutorial/j…

瑞吉外卖问题(待更新...

文章目录 一、session注册时二、用户增加时三、RequestBody3.1 Long问题3.2 RequestBody3.3 UpdataById 一、session注册时 刚开始使用的是该代码 httpServletRequest.setAttribute("employee",emp.getId());导致我点击登录后,还是一直在登录页面&#x…

华为面试题及答案——机器学习(一)

(1). 线性回归普通最小二乘法运用的经典基本假设有哪些? 线性回归中,普通最小二乘法(Ordinary Least Squares, OLS)是一种常用的估计方法。 线性关系假设: 假设自变量(X)与因变量(Y)之间存在线性关系。即,模型可以表示为 Y=β0+β1X1+β2X2+...+βnXn+ϵY = \beta_0…

矩阵补全IGMC 学习笔记

目录 Inductive Graph-based Matrix Completion (IGMC) 模型 igmc推理示例: Inductive Graph-based Matrix Completion (IGMC) 模型 原版代码: IGMC/models.py at master muhanzhang/IGMC GitHub GNN推理示例 torch_geometric版本:tor…

mysql查询不同用户(操作记录)的最新一条记录

先用MAX(time) 和 group by item_id 查询出不同的item_id对应的最大时间,然后再在外面连表查询,查询 表中 item_id 和login_time 时间 相等于刚才的查询记录的记录 具体语句如下 select a.* from reyo a join (select item_id,max(login_time) as ti…