zoukankan      html  css  js  c++  java
  • 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深度学习】

    长按或者扫描下面二维码即可关注

  • 相关阅读:
    Supreme(ง •̀_•́)ง
    基于VS快速排序的单元测试
    POST GET
    Go对比其他语言新特性1(字符类型、类型转换、运算符、键盘输入、for、switch)
    四则运算问题
    软件工程第三次作业!
    Servlet
    结对编程1
    Kafka技术原理知识点总结
    KafkaStream简介
  • 原文地址:https://www.cnblogs.com/stq054188/p/11963517.html
Copyright © 2011-2022 走看看