OpenCV和Zbar两个Python模块实现二维码和条形码识别

在我们的日常生活中,处处可见条形码和二维码。

在以前,我们去逛书店时,或者你现在随手拿起你身边的一本书,你肯定能看到书本的封页后面印有一排黑色线条组成的标签,也就是条形码;你去你们学校的自助机上借书还书时识别的也是条形码;哦,对了,你还记得每次大型考试答题卡上都会贴上监考老师分发给你的那个标签吗?还是条形码;甚至现在你随随便便逛个超市或便利店,收银员或者自助机也都是通过扫商品条形码给你计价的。条形码在我们的日常生活中真的是随处可见。

到了后来,2016年之后,二维码也渐渐开始普及起来,现在二维码几乎成了我们日常生活的一部分:新朋友微信加个好友;上下班搭乘公交地铁;平时买东西付款;和别人收付款的当面交易;各个大小公司或者商场甚至地摊搞活动的时候也告诉你扫码有优惠。

现在只要你出门,或者你不出门,你只要用手机,你是个网民,你就很难不接触到各种条形码与二维码。

那么这些个条形码识别和二维码识别是怎么完成的呢?

其实使用OpenCV和Zbar这两个python模块就可以实现二维码和条形码的识别。

1.软件安装

在Ubuntu上安装Zbar:

$ sudo apt-get install libzbar0

在MacOS系统中安装Zbar:

$ brew install zbar

另外还需要安装OpenCV:
pip install opencv-python

2.识别图片上的二维码或条形码

# 导入模块

from pyzbar import pyzbar

import matplotlib.pyplot as plt

import cv2

# 读取图片

image = cv2.imread('image.jpeg')

# 找到图像中的条形码并进行解码

barcodes = pyzbar.decode(image)

def decode(image, barcodes):

    # 循环检测到的条形码

    for barcode in barcodes:

        # 提取条形码的边界框的位置

         # 画出图像中条形码的边界框

        (x, y, w, h) = barcode.rect

        cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 5)

        # 条形码数据为字节对象,所以如果我们想在输出图像上

        # 画出来,就需要先将它转换成字符串

        barcodeData = barcode.data.decode("utf-8")

        barcodeType = barcode.type

        # 绘出图像上条形码的数据和条形码类型

        text = "{} ({})".format(barcodeData, barcodeType)

        cv2.putText(image, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,.8, (255, 0, 0), 2)

        # 向终端打印条形码数据和条形码类型

        print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))

    plt.figure(figsize=(10,10))

    plt.imshow(image)

plt.show()

#. 识别二维码

decode(image, barcodes)

# 读取图片

image = cv2.imread('image2.png')

# 找到图像中的条形码并进行解码

barcodes = pyzbar.decode(image)

# 识别条形码

decode(image, barcodes)

输出结果
[INFO] Found QRCODE barcode: http://weixin.qq.com/r/-irJ0RbEbUsSrVKy93-s

[INFO] Found CODE128 barcode: http://weixin.qq.com/r/-irJ0RbEbUsSrVKy93-s

3.识别视频中的二维码或条形码

from pyzbar import pyzbar

import cv2

# 获取二维码或条形码

def decode(image):

    # 找到图像中的条形码并进行解码

    barcodes = pyzbar.decode(image)

    # 循环检测到的条形码

    for barcode in barcodes:

        # 提取条形码的边界框的位置

         # 画出图像中条形码的边界框

        (x, y, w, h) = barcode.rect

        cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 5)

        # 条形码数据为字节对象,所以如果我们想在输出图像上

        # 画出来,就需要先将它转换成字符串

        barcodeData = barcode.data.decode("utf-8")

        barcodeType = barcode.type

        # 绘出图像上条形码的数据和条形码类型

        text = "{} ({})".format(barcodeData, barcodeType)

        cv2.putText(image, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,.8, (255, 0, 0), 2)

# 读取摄像头

cap = cv2.VideoCapture(0)

while(True):

    ret, frame = cap.read()

    if ret==True:

        # 获取二维码或条形码

        decode(frame)

        # 显示图片

        cv2.imshow('frame',frame)

        # 按q退出

        if cv2.waitKey(1) & 0xff == ord('q'):

            break

    else:

        break

cap.release()

cv2.destroyAllWindows()

识别效果视频地址

参考资料: www.pyimagesearch.com

4.作者介绍

5.项目打包

关注公众号:Python数据分析和人工智能
后台回复:1207

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: OpenCVZBar两个常用的开源库,可以用于实现摄像头识别二维码的功能。 首先,OpenCV是一款用于计算机视觉的开源库,它提供了丰富的图像处理和计算机视觉算法,可以用来处理图像和视频。OpenCV支持各种程序设计语言,包括C++、Python等,因此非常方便开发者进行二维码的图像处理和识别。 而ZBar是一款专门用于二维码条形码扫描的开源库。它提供了各种功能强大的接口,可以对摄像头捕捉到的图像进行二维码识别ZBar支持多种编程语言,如C、C++、Python等,因此可以与OpenCV结合使用。 要实现摄像头识别二维码的功能,可以按照以下步骤进行: 1. 首先,使用OpenCV打开摄像头,获取实时图像流。 2. 将摄像头捕捉到的图像传递给ZBar库进行二维码识别ZBar库提供了相关的函数和接口,可以将摄像头捕获的图像进行处理,并识别其中的二维码。 3. 当ZBar识别二维码时,可以通过回调函数或其他方式将识别到的二维码信息传递给应用程序,可以对识别到的二维码进行相关的操作,如解析二维码内容,打开对应的链接或进行其他业务处理。 总的来说,通过将OpenCVZBar结合使用,我们可以实现摄像头实时识别二维码的功能。这样,我们可以利用摄像头实时获取图像流,并通过ZBar库对图像进行识别,从而实现二维码的实时扫描和处理。 ### 回答2: OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。而ZBar是一个开源的条码和二维码识别库,能够通过摄像头进行实时的二维码识别。 使用OpenCVZBar实现摄像头识别二维码的步骤如下: 1. 首先,我们需要使用OpenCV库中的VideoCapture类来打开摄像头,并获取实时的视频帧。 2. 在每一帧中,我们将使用ZBar库提供的二维码识别功能。通过将每一帧转换为灰度图像,可以提高识别效果。 3. 在灰度图像上,我们可以使用ZBar库的Scanner类进行二维码的扫描。Scanner类可以检测到图像中的所有二维码,并返回相关信息。 4. 当扫描到二维码时,我们可以从Scanner类中获取二维码的内容。 5. 最后,我们可以使用OpenCV库提供的绘图功能,在视频帧上标记出识别到的二维码的位置和内容。 通过以上步骤,我们可以实现摄像头实时识别二维码的功能。这种方法可以应用于一些需要实时扫描二维码的场景,例如门禁系统、物流追踪等。同时,OpenCVZBar库的开源特性也使得开发者能够根据自己的需求进行定制和修改,提高二维码识别的准确率和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qin_bf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值