学习笔记_在Python中使用微信扫码功能(OpenCV WeChatQRCode)

news/2025/9/24 14:20:30/文章来源:https://www.cnblogs.com/swdeng/p/19109175

原文链接:http://www.juzicode.com/opencv-note-wechat-qrcode-detect-decode

微信开发团队在今年年初的时候将其二维码扫描功能贡献给了OpenCV社区,在OpenCV-Python中也可以使用微信扫码功能了。

使用前需要安装opencv-contrib-python包,注意安装的包不能低于4.5.2版本。

使用起来也非常简单,近乎一行流的风格,首先是用wechat_qrcode_WeChatQRCode()创建检测实例,再用detectAndDecode()检测和识别:

import cv2  
print('cv2.__version__:',cv2.__version__)
detect_obj = cv2.wechat_qrcode_WeChatQRCode()
img = cv2.imread('pic/qr.jpg')
res,points = detect_obj.detectAndDecode(img)
print('res:',res)
print('points:',points)

image

 

但是这个时候看到检测到的二维码位置是错误的,那是因为在创建检测实例的时候没有传入模型文件导致的,为了更好的检测精度和检测效果,应该在创建实例的时候传入模型文件,模型文件可以在https://github.com/WeChatCV/opencv_3rdparty/tree/wechat_qrcode 下载到,该链接包含了4个模型文件。

image

 下面的例子是在wechat_qrcode_WeChatQRCode()创建实例的时候传入4个模型文件,注意根据入参名称确定4个模型文件的顺序:
cv2.wechat_qrcode_WeChatQRCode( [, detector_prototxt_path[, detector_caffe_model_path[, super_resolution_prototxt_path[, super_resolution_caffe_model_path]]]] )

import cv2  
print('cv2.__version__:',cv2.__version__)
detect_obj = cv2.wechat_qrcode_WeChatQRCode('detect.prototxt','detect.caffemodel','sr.prototxt','sr.caffemodel')
img = cv2.imread('pic/qr.jpg')
res,points = detect_obj.detectAndDecode(img)
print('res:',res)
print('points:',points)
for pos in points:color=(0,0,255)thick=3for 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('wechat-qrcode-detect.jpg',img)
cv2.waitKey()
cv2.destroyAllWindows()

image

 下面是一张图片中包含多个二维码的情况:

import cv2  
detect_obj = cv2.wechat_qrcode_WeChatQRCode('detect.prototxt','detect.caffemodel','sr.prototxt','sr.caffemodel')
img = cv2.imread('pic/qr-multi.jpg')
res,points = detect_obj.detectAndDecode(img)
print('res:',res)
print('points:',points)
for pos in points:color=(0,0,255)thick=3for 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('wechat-qrcode-detect-multi.jpg',img)
cv2.waitKey()
cv2.destroyAllWindows()

image

 

image

 下面我们来看一下现实场景中的识别效果,从摄像头获取图像并进行解析:

#VX公众号: 桔子code / juzicode.com 
import cv2  
print('cv2.__version__:',cv2.__version__)detect_obj = cv2.wechat_qrcode_WeChatQRCode('detect.prototxt','detect.caffemodel','sr.prototxt','sr.caffemodel')
cap = cv2.VideoCapture(0)
while cap.isOpened():ret, img = cap.read()if ret is not True:print("读取失败退出")break      res,points = detect_obj.detectAndDecode(img)print('res:',res)print('points:',points)for pos in points:color=(0,0,255)thick=3for 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)#检查按键key = cv2.waitKey(200) & 0xffif  key == ord('q') or key == ord('Q') :breakcap.release()
cv2.destroyAllWindows()

 

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

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

相关文章

fastApi框架开发一个web端仓库管理系统 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

国标GB28181视频平台EasyCVR如何构建安防监控“中枢神经”?

国标GB28181视频平台EasyCVR如何构建安防监控“中枢神经”?在视频监控互联互通的需求日益迫切的今天,如何打破不同品牌、不同协议设备之间的壁垒?本文深度解析基于国家标准GB/T28181协议的视频平台EasyCVR的核心特点…

做个网站跳转链接怎么做网站建设与发布

类的测试与函数的测试相似 测试函数的案例:https://blog.csdn.net/hanhanwanghaha/article/details/107487037 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努…

域名估价网站网页设计的首页如何设计官网

为啥又写一篇&#xff1f; 因为之前 用 Anchor 写的&#xff0c;这东西 放到Paragraph 里就不好使了 。 这回 目录里 和 跳转的地方 用的都是 Chunk 添加 目录条目 返回跳转的标记 public String addMenuTag (List<Pair<Chunk, String>> chunks, String[] men…

vscode中element-plus组件无属性提示

确保安装了Vue(Official)插件在项目根路径下的tsconfig.json中增加以下配置:compilerOptions:{"types": ["element-plus/global"], }重启编辑器即可

minio集群搭建

minio集群配置 minio不能装在/目录下,需要单独挂载磁盘 本文主机IP为 192.168.200.143 192.168.200.144 192.168.200.145 192.168.200.1461、给虚拟机添加磁盘,并配置挂载目录 [root@localhost ~]# fdisk -l磁盘 /de…

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名餐饮菜谱应用需求洞察

本文分析了一个基于知名餐饮品牌菜谱的开源项目,该项目专注于菜品收录和烹饪指导,支持网页端访问和AI配图功能。通过分析用户反馈,发现了对部署工具和内容管理的具体需求,揭示了在技术实现便捷的背景下,真实用户需…

英伟达入资 11Labs,黄仁勋:语音 AI 带来情感、共情和联结;Qwen3-TTS-Flash:多语言,多音色,多方言丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、…

潍坊网站开发公司影视类网站建设

作者|晶少 转载|CSDN博客 2.4亿人在线使用文档协作无延宕…… 6万名武汉中小学生实力打造“远程课堂”活学高效…… 疫情以来&#xff0c;“远程”、“协作”持续大热&#xff0c;此局毋庸置疑。 根据QuestMobile最新发布的《2020中国移动互联网“战役”专题报告》显示&am…

心理网站建设策划书做一份网站动态图多少钱

题目描述 搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&…

好的h5制作网站模板wordpress互动

配置旁挂二层组网隧道转发示例 组网图形 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff0c;不影响用户的业务使用。 组网需求 AC组…

网站建设与网络推广的关系xml网站模板

现有一个使用Relu激活函数的网络&#xff0c;训练过程中发现&#xff0c;它对所有的输入样本都输出一样的预测概率&#xff0c;比如二分类&#xff0c;对所有样本的预测概率都是[0.4,0.6]。由于预测概率都一样&#xff0c;因此预测标签也都一样&#xff0c;全预测为0或1。 一开…

深入解析:一文详解回归分析的探索、分析、检验阶段,以Stata和SPSS为例

深入解析:一文详解回归分析的探索、分析、检验阶段,以Stata和SPSS为例pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

Vue 包依赖总结

Vue 包依赖总结我在安装依赖包时出现问题:error minimatch@10.0.3: The engine "node" is incompatible with this module. Expected version "20 || >=22". Got "16.8.0" 这个错误…

笔记_OpenCV4.5.1新增微信QRCode解码功能

原文地址:https://cloud.tencent.com/developer/article/1786320WeChatQRCode模块为OpenCV4.5.1新增功能,需要在github下载最新opencv源码master和contrib部分编译后使用。 下载和编译: 使用:#include "pch…

完整教程:模电基础:基本放大电路及其优化

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【论文阅读】Uncertainty Modeling for Out-of-Distribution Generalization (ICLR 2022) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

数字孪生 + 碳痕追踪:MyEMS 给能源管理装了套 “全链路全景导航”

如果说传统的能源管理是在迷雾中凭经验摸索前行,那么当下的企业则迫切需要一张清晰、实时、能指引每一步节能减碳决策的“全景地图”。这张地图不仅要能还原能源系统的全貌,更要能追踪每一份能耗的“碳足迹”,直抵管…

空间复杂度和时间复杂度

要理解和计算时间复杂度与空间复杂度,关键是分析算法中重复执行的操作次数(时间)和额外开辟的存储空间(空间)如何随输入规模n变化。下面通过具体代码示例详细说明计算方法。 一、时间复杂度计算 时间复杂度关注核…

河北网站快速排名建设学电脑培训班多少一个月

排查流程 hive任务停止是调用org.apache.hive.jdbc.HiveStatement的close()方法实现的 其底层是委托给org.apache.hive.service.cli.thrift.TCLIService.Iface客户端实例来实现。 同时&#xff0c;通过JDK动态代理为其织入了synchronized同步机制&#xff1a;其底层是委托给…