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  decode

img = 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  decode

img = 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: 矩形边界框的高度。

 效果演示 

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

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值