博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV和Zbar两个Python模块实现二维码和条形码识别
阅读量:7117 次
发布时间:2019-06-28

本文共 2716 字,大约阅读时间需要 9 分钟。

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

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

到了后来,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 pyzbarimport matplotlib.pyplot as pltimport 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:
OpenCV和Zbar两个Python模块实现二维码和条形码识别

[INFO] Found CODE128 barcode:

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

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

from pyzbar import pyzbarimport 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:        breakcap.release()cv2.destroyAllWindows()

识别效果

参考资料:

4.项目打包

百度云盘

用OpenCV和Python识别二维码和条形码

转载于:https://blog.51cto.com/12340098/2332136

你可能感兴趣的文章
[NOI1995]石子合并
查看>>
操作函数
查看>>
最高科技——疯狂的前缀和
查看>>
<积极思考的力量 >读书笔记
查看>>
dp or 贪心 --- hdu : Road Trip
查看>>
基于SharePoint的单点登录的实现
查看>>
目标检测框架网络模型分析(三 王者归来)
查看>>
使用System.arraycopy()容易忽略的问题
查看>>
C++的指针使用心得
查看>>
Scene
查看>>
django之BBS-登录与注册功能-72
查看>>
php中判断是否可写?
查看>>
Flink 1.6.0 Windows操作
查看>>
hdu 5445 多重背包
查看>>
Python计算机视觉3:模糊,平滑,去噪
查看>>
Entity Framework Code First 多数据库 控制台迁移代码
查看>>
Docker镜像管理 --1.Docker ce安装和基本使用
查看>>
PAT 1129 Recommendation System[比较]
查看>>
Redis从零开始学习教程二 key值 存储和取值
查看>>
Spring_day03--课程安排_基于aspectj的注解aop_Spring的jdbcTemplate操作
查看>>