目前官方Release的OpenCV最新版本为4.1.2,偶然看到更新信息里面QRCode解码性能有提升,所以迫不及待想尝试一下,因为上次测试了4.0版本的效果不太好。
下载和配置OpenCV的步骤此处略过,网上都可以找到资料,步骤比较简单,大家自己完成即可。接下来作为检测和识别的第一步,我们首先要有QRCode二维码,大家可以网上下载,也可以用下面的python代码生成,后面是我用代码生成的三个二维码用于后续测试。
from PIL import Image import qrcode def make_code(): url = u‘OpenCV与AI深度学习‘ qr = qrcode.QRCode(version=5, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=8, border=4) qr.add_data(url) qr.make(fit=True) img = qr.make_image() img = img.convert("RGBA") icon = Image.open("opencv.png") img_w, img_h = img.size factor = 4 size_w = int(img_w / factor) size_h = int(img_h / factor) icon_w, icon_h = icon.size if icon_w > size_w: icon_w = size_w if icon_h > size_h: icon_h = size_h icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS) w = int((img_w - icon_w)/2) h = int((img_h - icon_h)/2) icon = icon.convert("RGBA") img.paste(icon, (w, h), icon) # img.show() img.save(‘logo-qrcode.png‘) make_code() print("Finished!")
接下来新建Win32控制台程序,复制示例代码qrcode.cpp,在opencv安装目录下sources/samples/cpp/qrcode.cpp位置,配置好后运行代码,会打开摄像头,进行实时QRCode二维码的检测和识别,下面是我检测的效果:
需要注意的是默认解码之后如果二维码内容中有中文会显示为乱码,使用下面代码可讲中文正常显示。
if (result_detection) { decode_info = qrcode.decode(src, transform, straight_barcode); if (!decode_info.empty()) { //cout << decode_info << endl; //原来直接输出std string std::wstring wtxt = utf8string2wstring(decode_info); // 将utf-8的string转换为wstring std::string txt_gbk = wstring2string(wtxt, "Chinese"); // 再将wstring转换为gbk的string std::cout << txt_gbk << endl; } }
那么你将会看到这样的结果:
最后对OpenCV4.1.2版本QRCode解码功能做个简单总结:
① 二维码检测和识别不论从速度和准确率方面都有了很大提升。
② 支持各种角度和各种颜色QRCode解码
③ 支持中文解码(输出内容转码即可)
④ 同时存在多个二维码时找不到
展望:期待后面能够支持多个二维码解码,同时能支持DataMatrix和其他类型二维码就更好了。
当然,如果有兴趣自己优化的朋友可以编译源码查看优化。
关注【OpenCV与AI深度学习】
长按或者扫描下面二维码即可关注
原文地址:https://www.cnblogs.com/stq054188/p/11963517.html
时间: 2024-10-13 03:27:07