OpenCV4.6 VS 4.7 QRCode解码功能效果对比

news2024/11/28 12:50:51

导  读

    本文主要对OpenCV4.7.0和4.6.0中QRCode检测/解码功能做简单的测试对比,供大家参考。

背景介绍

    最近OpenCV更新到了4.7.0版本,在ChangeLog算法部分除了新增Stackblur滤波算法(详细介绍见下面链接),还有对QRCode检测和解码的改进。

    吊打高斯模糊的StackBlur来了!

    QRCode部分按照changelog说法是对检测和解码质量做了改进,添加对齐标志支持,算法还是依赖WeChatQRCode,关于WeChatQRCode在OpenCV中的C++使用方法,可以参考下面链接,本文主要以Python OpenCV来做演示说明。

    OpenCV4.5.1新增微信QRCode解码功能使用步骤与测评 附源码和效果视频

OpenCV4.7 WeChatQRCode使用

  【1】OpenCV4.7.0安装(必须安装opencv-contrib)

pip install opencv-python==4.7.0.68pip install opencv-contrib-python==4.7.0.68

  【2】下载模型文件(检测模型和超分辨率模型):

https://github.com/WeChatCV/opencv_3rdparty 

  【3】图片测试:

# WX公众号:OpenCV与AI深度学习import cv2  print('cv2.__version__:',cv2.__version__)detect_proto = './model/detect.prototxt'detect_model = './model/detect.caffemodel'sr_proto = './model/sr.prototxt'sr_model = './model/sr.caffemodel'detect_obj = cv2.wechat_qrcode_WeChatQRCode(detect_proto,detect_model,sr_proto,sr_model)
img = cv2.imread('imgs/8.jpg')res,points = detect_obj.detectAndDecode(img)print('result',res)print('corners:',points)for pos in points:    color=(0,0,255)    thick=2    for p in [(0,1),(1,2),(2,3),(3,0)]:        start = int(pos[p[0]][0]),int(pos[p[0]][1])        end = int(pos[p[1]][0]),int(pos[p[1]][1])        cv2.line(img,start,end,color,thick)cv2.imshow('img',img)cv2.imwrite('result.jpg',img)cv2.waitKey()cv2.destroyAllWindows()

    测试结果:

    其他图片:

  【4】视频测试:​​​​​​​

# WX公众号:OpenCV与AI深度学习import cv2  print('cv2.__version__:',cv2.__version__)detect_proto = './model/detect.prototxt'detect_model = './model/detect.caffemodel'sr_proto = './model/sr.prototxt'sr_model = './model/sr.caffemodel'detect_obj = cv2.wechat_qrcode_WeChatQRCode(detect_proto,detect_model,sr_proto,sr_model)
def qr_decode(img):    res,points = detect_obj.detectAndDecode(img)    print('result',res)    for pos in points:        color=(0,0,255)        thick=2        for p in [(0,1),(1,2),(2,3),(3,0)]:             start = int(pos[p[0]][0]),int(pos[p[0]][1])            end = int(pos[p[1]][0]),int(pos[p[1]][1])            cv2.line(img,start,end,color,thick)
cap = cv2.VideoCapture('test.mp4')fourcc = cv2.VideoWriter_fourcc(*'XVID')  out = cv2.VideoWriter('out.mp4',fourcc, 15.0, (1280,720))if(cap.isOpened()): #视频打开成功  while(True):    ret,frame = cap.read()#读取一帧    #if(frame is None):    if ret==False: #读取帧失败      break    qr_decode(frame)     cv2.imshow("qrcode decoder", frame)    out.write(frame)    if cv2.waitKey(10)&0xFF ==27: #按下Esc键退出      break    cap.release()out.release()cv2.waitKey()cv2.destroyAllWindows()

   

OpenCV4.6与OpenCV4.7 QRCode解码功能对比

OpenCV4.7.0 VS 4.6.0

  【1】OpenCV4.6.0安装​​​​​​​

pip install opencv-python==4.6.0.66pip install opencv-contrib-python==4.6.0.66

  【2】图片测试(模型和代码相同):

    上面三张图片4.6.0和4.7.0都可以正确解码,测试一下图片,4.6.0不能解码的,4.7.0也不能,直观看起来解码能力并未有明显提升。检测部分增进了对齐标记支持,所以标注的位置4.7.0比4.6.0更准确。

    对比检测解码时间发现4.7.0比4.6.0略有增加,这部分未改进。

    OpenCV4.6.0视频测试效果:

OpenCV4.6与OpenCV4.7 QRCode解码功能对比

—THE END—

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现通讯录(C语言)

功能实现 实现步骤: 创建通讯录 初始化通讯录 打印菜单 实现选择功能 实现添加功能 实现删除功能 实现查找功能 实现修改功能 实现清空功能 实现排序功能 实现查询所有联系人信息功能 通讯录总代码 创建通讯录 1、创建成员信息结构体 我们用结构体来封装一个联系人…

【系列04】数组 多维数组 冒泡排序 稀疏数组[有目录]

数组声明和创建 变量类型 变量名称 变量的值 声明数组 int []nums;//定义//上面是首选 /*也可以 int nums2[];*/下面这种写法是为了迎合c与c用户的喜爱,更推荐用上面的定义 方式 创建数组 numsnew int[10];定义数组计算数组的和 package com.SunAo.array; //变量类型 变量名称…

TypeScript 数据模型层编程的最佳实践

虽然 TypeScript 主要用于客户端,而数据模型的设计主要是服务端来做的。 但是要写出优雅的代码,也还是有不少讲究的。 让我们从一个简单的我的文章列表 api 返回的数据开始,返回的文章列表的信息如下: {"id": 2018,&qu…

原生PHP及thinkphp6接入阿里云短信

申请accesskey获取到Accesskey ID和Accesskey Secret保存下来,一会要用到添加测试手机号,在接口测试能否正常发送下载阿里云短信sdk,使用composer下载,没有安装请先安装安装可以安装到任意文件夹下,后面代码写好后&…

TDSQL的安装教程(低配体验)

一、了解TDSQL tdsql腾讯云文档 TDSQL-C MySQL 版(TDSQL-C for MySQL)是腾讯云自研的新一代云原生关系型数据库。融合了传统数据库、云计算与新硬件技术的优势,为用户提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务。TDSQL-C My…

AtCoder Beginner Contest 285解题报告

A - Edge Checker 2 Problem Statement Determine if there is a segment that directly connects the points numbered a and b in the figure below. Constraints 1≤a<b≤15a and b are integers.Input The input is given from Standard Input in the following for…

用SpectorJS调试WebGL应用

随着使用 WebGL 构建的体验不断涌现&#xff0c;以及 WebVR/AR 领域的所有改进&#xff0c;拥有高效的调试工具变得至关重要。 无论你是刚刚起步还是已经是使用 WebGL 开发 3D 应用程序的经验丰富的开发人员&#xff0c;都可能知道工具对于生产力的重要性。 在寻找此类工具时&…

【开发环境】JRE 裁剪 ① ( 裁剪 bin 目录下的 dll 动态库文件 )

文章目录一、JRE 裁剪二、裁剪 bin 目录下的 dll 动态库文件参考博客 : 精简jre1.8精简jre步骤裁剪JRE(嵌入式设备的java环境移植) 资源下载地址 : https://download.csdn.net/download/han1202012/87388400 一、JRE 裁剪 在 【IntelliJ IDEA】使用 exe4j 生成 jre jar 可执…

华为MPLS跨域A、B方案实验配置

目录 MPLS域内配置 MPLS-AS100域内配置 MPLS-AS200域内配置 域间方式A配置 ASBR4和ASBR5配置实例 ASBR之间建立基于实例的EBGP邻居关系 域间方式B配置 ASBR相连接口开启MPLS ASBR之间建立MP-BGP的EBGP邻居 配置取消RT值检测 配置传递路由时更改下一跳为自身 MPLS域内…

程序员必知必会 QPS TPS、URI URL、PV UV GMV

一、QPS和 TPS QPS&#xff1a;Queries Per Second&#xff0c;意思是“每秒查询数”&#xff0c;是一台服务器每秒能够响应的查询次数&#xff0c;是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 即最大吞吐能力。 TPS&#xff1a;TransactionsPerSecond&…

springboot整合log4j2

导入依赖 <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency><!--log4j2--> <dependency><groupId>org.apache.logging.log4j</groupId>&…

Spring Boot(五十三):SpringBoot Actuator之实现

1 场景介绍 对于一个大型的几十个、几百个微服务构成的微服务架构系统&#xff0c;在线上时通常会遇到下面一些问题&#xff0c;比如&#xff1a; 1. 如何知道哪些服务除了问题&#xff0c;如何快速定位&#xff1f; (健康状况&#xff09; 2. 如何统一监控各个微服务的性能指标…

JAVA会员营销系统源码+数据库,实体店铺会员管理和营销系统源码,采用SpringBoot + Mysql+Mybatis

会员营销系统介绍 介绍 fuint会员营销系统是一套开源的实体店铺会员管理和营销系统。系统基于前后端分离的架构&#xff0c;后端采用Java SpringBoot Mysql&#xff0c;前端基于当前流行的Uniapp&#xff0c;Element UI&#xff0c;支持小程序、h5。主要功能包含电子优惠券、…

冰蝎V4.0流量分析到攻防检测

0x01 前言 最近在改写 yso&#xff0c;觉得自己基础太差了&#xff0c;想先阅读一下 sqlmap、冰蝎以及一些其他工具的开发思路。文章可能写的不够严谨&#xff0c;有不对的地方还请师傅们多多指出。 0x02 环境搭建 这里我看的是 MountCloud 师傅所二开的冰蝎项目&#xff0c…

【关于Linux中----进程间通信方式之system V共享内存】

文章目录一、共享内存示意图二、学习共享内存前的准备工作三、共享内存函数3.1创建共享内存&#xff1a;3.2控制共享内存&#xff1a;3.3挂接和去挂接&#xff1a;一、共享内存示意图 上一篇文章中讲述的是管道的通信方式&#xff0c;而这里要讲的是操作系统层面专门为进程间通…

编译原理-链接实例分析

gcc-arm-none-eabi 工具链功能1.arm-none-eabi-gcc &#xff1a;c语言编译器&#xff0c;可以将.c文件编译为.o的执行文件2.arm-none-eabi-g &#xff1a;c编译器&#xff0c;可以将.cpp文件编译成.o的执行文件3.arm-none-eabi-ld : 链接器&#xff0c;链接所有的.o文件生成可执…

CDH6.3生产环境中禁用Kerberos

在集群启用Kerberos后&#xff0c;会对现有环境的部分代码做改造&#xff0c;有些人觉得使用起来不方便&#xff0c;想取消Kerberos。本篇文章主要介绍如何禁用CDH集群的Kerberos及禁用后对各组件服务的测试。修改了网上相关文档的一些缺陷&#xff0c;在生产环境中实际使用过通…

GIT ---- GitHub配置SSH Key的完整步骤

1. 配置 SSH Key 由于提交代码每次输入用户名和密码&#xff0c;很繁琐&#xff0c;所以直接配置 SSH Key&#xff0c;直接自动验证&#xff0c;减少提交代码的操作步骤。 2. 查看配置命令 git config --list 查看当前Git环境所有配置&#xff0c;还可以配置一些命令别名之类…

这一年,熬过许多夜,也有些许收获 | 2022年度总结

弹指一挥间&#xff0c;时间如白驹过隙。光阴似箭&#xff0c;日月如梭&#xff0c;时间如闪电&#xff0c;转瞬即逝。回望来时路&#xff0c;不觉潸然泪下… 一说到年终总结&#xff0c;好像都离不开这样煽情的开场白。但不可否认的是&#xff0c;时间确实过得很快&#xff0…

学习记录661@项目管理之项目立项管理

什么是项目立项管理 项目立项管理关注的重点在于是否要启动一个项目&#xff0c;并为其提供相应的预算支持具体来说&#xff0c;项目立项管理包括以下 5 个典型环节&#xff0c;分别是 项目建议项目可行性分析项目审批项目招投标项目合同谈判与签订 需要说明的是&#xff0c…