二维码结构与检测
标准的二维码结构如下:
特别要关注的是图中三个黑色正方形区域,它们就是用来定位一个二维码的最重要的三个区域,我们二维码扫描不检测首先要做的就是要发现这三个区域,如果找到这个三个区域,我们就成功的检测到一个二维码了,就可以对它定位与识别了。三个角上的正方形区域从左到右,从上到下黑白比例为1:1:3:1:1。不管角度如何变化,这个是最显著的特征,通过这个特征我们就可以实现二维码扫描检测与定位。
二维码生成
Python语言实现二维码生成其实十分简单,有个纯Python的二维码生成包, 地址与python安装执行命令如下:
https://pypi.org/project/qrcode/
pip install qrcode
然后执行如下代码即可实现二维码的生成, 代码演示如下:
二维码解析
使用zbar进行二维码解析,但是标准的zbar不支持python3,这个比较坑,还好有个大神在zbar的基础上包装了一下,做了pyzbar的开发包,支持python2与python3,非常的好用。安装非常容易,windows下一条命令搞定,Linux与Mac OS下面要先安装zbar然后再执行此命令即可。
pip install pyzbar
解析调用接口支持PIL / Pillow images, OpenCV / numpy ndarrays, and raw bytes等各种格式,可以看出来跟OpenCV可以直接的无缝对接,基本上OpenCV读出来的图像,直接可以给它使用,演示如下:
可以看出解析结果分为四个部分,分别为:
Data – 表示二维码内容
Type表示类型,可以是二维码或者各种条码
Rect表示二维码区域外接矩形
Polygon表示二维码区域的多边形
外接矩形与多边形状表示如下:
其中蓝色矩形表示外接矩形,粉色表示多边形四点坐标。
二维码检测与解析演示
其中QRcodeDetector是我自己实现的基于二值图像轮廓分析实现的二维码检测类。支持各种纠偏,倾斜,放缩二维码检测,同时对检测到的二维码区域会截取ROI区域然后送到zbar进行二维码解析,输出二维码解析data内容。
导入的包与初始化代码如下
静态图像二维码检测与解析
实时视频二维码检测与解析
效果演示
欢迎扫码加入【OpenCV研习社】
领取专属 10元无门槛券
私享最新 技术干货