目前官方Release的OpenCV最新版本爲4.1.2,偶然看到更新信息裏面QRCode解碼性能有提高,因此火燒眉毛想嘗試一下,由於上次測試了4.0版本的效果不太好。python
下載和配置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解碼功能作個簡單總結:url
① 二維碼檢測和識別不論從速度和準確率方面都有了很大提高。code
② 支持各類角度和各類顏色QRCode解碼orm
③ 支持中文解碼(輸出內容轉碼便可)blog
④ 同時存在多個二維碼時找不到utf-8
展望:期待後面可以支持多個二維碼解碼,同時能支持DataMatrix和其餘類型二維碼就更好了。
固然,若是有興趣本身優化的朋友能夠編譯源碼查看優化。
關注【OpenCV與AI深度學習】
長按或者掃描下面二維碼便可關注