OpenCV4学习笔记(58)——二维码检测与识别

本次要整理的笔记内容是在OpenCV中对二维码进行检测与识别。二维码对我们来说可以说是非常熟悉的,乃至于每次出门都会和“扫码”挂钩,可以说二维码已经渗入到我们生活的方方面面。那么二维码到底什么东西呢?这里是关于二维码的一些相关信息。(参考维基百科)

二维码也称为二维条码,是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图案表示二进制数据,被设备扫描后可获取其中所包含的信息。一维条码的宽度记载着数据,而其长度没有记载数据,而二维码的长度、宽度均记载着数据。二维码具有一维条码所不具有的“定位点”和“容错机制”。容错机制在即使没有识别到全部的条码、或是说条码有污损时,也可以正确地还原条码上的信息。二维码包含很多种种类,例如PDF417码、QR码、汉信码、颜色条码、EZ码、Aztec Code、QuickMark、Data Matrix等等,不同机构开发出来的不同二维码之间具有不同的结构和编解码方式,可适用于不同的场合。

在OpenCV中的QRCodeDetector主要是对QR码的检测与识别。
QR码,全称为快速响应矩阵图码(Quick Response Code),是二维码的一种,于1994年由日本DENSO WAVE公司发明。QR来自英文Quick Response的缩写,即快速反应,因为发明者希望QR码可以快速解码其内容。QR码使用四种标准化编码模式(数字、字母数字、字节(二进制)和日文(Shift_JIS))来存储数据。QR码的应用范围已经扩展到包括产品跟踪,物品识别,文档管理,库存营销等方面。

在OpenCV中对二维码的检测与识别首先需要创建一个QRCodeDetector类的对象,然后可以分别调用检测与识别的API。

检测API为detect(),其参数含义如下:
(1)参数img:输入的灰度或彩色图像。
(2)参数points:输出的一个点向量,包含检测到二维码的最小面积矩形的四个顶点坐标。

识别API为decode(),其参数含义如下:
(1)参数img:输入的灰度或彩色图像。
(2)参数points:检测API中得到的二维码的四个顶点坐标。
(3)参数straight_qrcode:输出的经过矫正和二值化的二维码图像。

除此之外,还有一个将检测和识别合并起来的APIdetectAndDecode(),其参数含义如下:
(1)参数img:输入的包含二维码的灰度或彩色图像;
(2)参数points:返回检测到的二维码四个顶点坐标;
(3)参数strainght_qrcode:输出的经过矫正和二值化的二维码图像;
(4)返回值:一个string字符串,为二维码解码后得到的字符信息。

下面是代码演示:


	Mat QR = imread("D:\\opencv_c++\\opencv_tutorial\\data\\images\\qrcode_06.jpg");
	Mat straight_qrcode;
	vector<Point>points;
	string info;
	QRCodeDetector QR_detector;
	info = QR_detector.detectAndDecode(QR, points, straight_qrcode);
	//第一个参数img:输入的包含二维码的灰度或彩色图像;
	//第二个参数points:返回检测到的二维码四个顶点坐标;
	//第三个参数strainght_qrcode:输出的经过矫正和二值化的二维码图像;
	//返回一个string字符串,为二维码解码后得到的字符信息
	putText(QR, info, points[0], FONT_HERSHEY_SIMPLEX, 0.7, Scalar(0, 255, 0), 1, 8);
	imshow("QR", QR);
	imshow("straight_qrcode", straight_qrcode);

看一下识别效果怎样:
OpenCV4学习笔记(58)——二维码检测与识别_第1张图片
上图中,左边是输入的原图,右边是经过二维码检测与识别后输出的文本信息。下图是将图中二维码进行矫正以及二值化后的结果:
OpenCV4学习笔记(58)——二维码检测与识别_第2张图片

演示图像2:

不过需要注意的一点是,OpenCV中对二维码进行解码的API并不适用于包含中文字符的二维码,会识别出乱七八糟的字符,无法正常显示,如下图:

虽然OpenCV中包含了对二维码的检测与识别功能,但是目前来说这个功能还是比较鸡肋的,应该比较少会被派上用场,可以仅作为了解。好的那本次笔记整理到此结束。

PS:本人的注释比较杂,既有自己的心得体会也有网上查阅资料时摘抄下的知识内容,所以如有雷同,纯属我向前辈学习的致敬,如果有前辈觉得我的笔记内容侵犯了您的知识产权,请和我联系,我会将涉及到的博文内容删除,谢谢!

你可能感兴趣的:(学习笔记)