OpenCV4.1.2 QRCode解碼體驗測評(附源碼+支持中文)


目前官方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深度學習】

長按或者掃描下面二維碼即可關注


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM