EmguCV学习笔记 C# 12.2 WeChatQRCode

  版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。

教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客

教程C#版本请访问:EmguCV学习笔记 C# 目录-CSDN博客

笔者的博客网址:https://blog.csdn.net/uruseibest

教程配套文件及相关说明以及如何获得pdf教程和代码,请移步:EmguCV学习笔记

学习VB.Net知识,请移步: vb.net 教程 目录_vb中如何用datagridview-CSDN博客

 学习C#知识,请移步:C# 教程 目录_c#教程目录-CSDN博客

 

12.2 WeChatQRCode

WeChatQRCode类是一个用于识别和生成微信二维码的类,它提供了一组方法来创建、识别和解码二维码图像。它是腾讯团队贡献的模块。

一、构造函数载入模型

            WeChatQRCode qrcd1 = new WeChatQRCode(

                    modpath + "detect.prototxt",

                    modpath + "detect.caffemodel",

                    modpath + "sr.prototxt",

                modpath + "sr.caffemodel");

需要载入的模型包括:detect.prototxt、detect.caffemodel、sr.prototxt、sr.caffemodel,通常安装EmguCV后就有。如果没有,可以从https://github.com/WeChatCV/opencv_3rdparty下载。

二、使用DetectAndDecode方法获得二维码信息,该方法常用的一个重载:

public string[] DetectAndDecode ( IinputArray img, IoutputArrayOfArrays points);

参数说明:

  1. Img:包含二维码的输入图像。
  2. points:这是一个VectorOfMat对象。返回的每个二维码所在矩形框四角坐标保存在一个Mat中。每个Mat有8个double数据,对应4个点的坐标,表示该二维码所在的矩形框。

返回包含多个二维码解码后的信息(字符串数组)。

具体代码如下:

【代码位置:frmChapter12】Button3_Click、PointFToPoint

       //二维码识别

        //使用微信提供的WeChatQRCode

        private void Button3_Click(object sender, EventArgs e)

        {

            Mat m = new Mat("c:\\learnEmgucv\\qrcode3.png", ImreadModes.AnyColor);

            ImageBox1.Image = m;

            string modpath = "C:\\learnEmgucv\\wechat_qrcode\\";

            //必须的几个模块,可以在如下地址下载

            //https://github.com/WeChatCV/opencv_3rdparty

            WeChatQRCode qrcd1 = new WeChatQRCode(

                    modpath + "detect.prototxt",

                    modpath + "detect.caffemodel",

                    modpath + "sr.prototxt",

                    modpath + "sr.caffemodel");

            string[] infos;

            //返回有几个二维码,每个二维码所在矩形框四角坐标保存在一个Mat

            //每个mat8double数据,对应4个点的坐标,表示该二维码所在的矩形框

            VectorOfMat vm = new VectorOfMat();

            infos = qrcd1.DetectAndDecode(m, vm);

            //返回解码后的结果

            for (int i = 0; i < infos.Length; i++)

                Console.WriteLine(infos[i]);

            VectorOfPointF[] qrp = new VectorOfPointF[vm.Size];

            for (int i = 0; i < vm.Size; i++)

            {

                PointF[] p=new PointF[4];

                vm[i].CopyTo(p);

                qrp[i] = new VectorOfPointF();

                qrp[i].Push(p);

            }

            //标记二维码位置

            Mat m1 = new Mat();

            m1 = m.Clone();

            for (int i = 0; i < qrp.Length; i++)

            {

                CvInvoke.Line(m1, PointFToPoint(qrp[i][0]), PointFToPoint(qrp[i][1]), new MCvScalar(0, 0, 255), 2);

                CvInvoke.Line(m1, PointFToPoint(qrp[i][1]), PointFToPoint(qrp[i][2]), new MCvScalar(0, 0, 255), 2);

                CvInvoke.Line(m1, PointFToPoint(qrp[i][2]), PointFToPoint(qrp[i][3]), new MCvScalar(0, 0, 255), 2);

                CvInvoke.Line(m1, PointFToPoint(qrp[i][3]), PointFToPoint(qrp[i][0]), new MCvScalar(0, 0, 255), 2);

            }

            CvInvoke.Imshow("qrcode", m1);

        }

        //PointFPoint方法

        private Point PointFToPoint(PointF pf)

        {

            return new Point((int)pf.X, (int)pf.Y);

        }

输出结果如下图所示:

 

图12-3 使用WeChatQRCode获得二维码信息

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

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

相关文章

【Android】Handler用法及原理解析

文章目录 用处基本用法用法一&#xff1a;使用sendMessage和handleMessage方法用法二&#xff1a;使用post方法 法一工作原理Handler的sendMessageMessage成员变量 MessageQueueLooper主线程自动初始化子线程手动创建prepareloop Handler的dispatchMessage 法二工作原理Handler…

electron多标签页模式更像客户端

Electron多标签页模式是指在Electron框架中实现的类似Web浏览器的多标签页功能。Electron是一个使用Web技术&#xff08;HTML、CSS和JavaScript&#xff09;来创建跨平台桌面应用程序的框架。在Electron中实现多标签页模式&#xff0c;通常需要借助一些特定的库或组件&#xff…

PMP--二模--解题--11-20

文章目录 14.敏捷--实践--每日站会--团队成员利用每日站会对彼此做出小的承诺&#xff0c;发现问题&#xff0c;并确保团队工作顺利进行。&#xff08;不是项目经理说&#xff0c;是团队成员&#xff09;11、 [单选] 在每日站会上&#xff0c;项目经理与团队成员逐个交流&#…

VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025

VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025 VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) ESXi 7.0U3 标准版集成 Intel 网卡、Realtek USB 网卡 和 NVMe 驱动 请访问原文链…

口哨声、歌声、boing声和biotwang声:用AI识别鲸鱼叫声

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

web基础—dvwa靶场(八)XSS

XSS(DOM) 跨站点脚本&#xff08;XSS&#xff09;攻击是一种注入攻击&#xff0c;恶意脚本会被注入到可信的网站中。当攻击者使用 web 应用程序将恶意代码&#xff08;通常以浏览器端脚本的形式&#xff09;发送给其他最终用户时&#xff0c;就会发生 XSS 攻击。允许这些攻击成…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第五集:再制作更多的敌人

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作敌人另个爬虫Crawler 1.公式化导入制作另个爬虫Crawler素材2.制作另个爬虫Crawler的Crawler.cs状态机3.制作敌人另个爬虫Crawler的playmaker状态机二、…

大型语言模型 (LLM) 劫持攻击不断升级,导致每天损失超过 100,000 美元

Sysdig 威胁研究团队 (TRT) 报告称&#xff0c;LLMjacking&#xff08;大型语言模型劫持&#xff09;事件急剧增加&#xff0c;攻击者通过窃取的云凭证非法访问大型语言模型 (LLM)。 这一趋势反映了 LLM 访问黑市的不断增长&#xff0c;攻击者的动机包括个人使用和规避禁令和制…

DNS服务

一.DNS介绍 DNS应用层协议 Domain Name System 域名系统 作用&#xff1a;实现域名解析&#xff0c;解析主机名所对应的IP地址&#xff0c; 在网络环境中设备与设备之间要想相互通信只能依赖IP地址&#xff0c;DNS服务器的作用是实现域名解析。 如上图所示&#xff0c;DNS存…

英飞凌 PSoC6 RT-Thread 评估板简介

概述 2023年&#xff0c;英飞凌&#xff08;Infineon&#xff09;联合 RT-Thread 发布了一款 PSoC™ 62 with CAPSENSE™ evaluation kit 开发板 &#xff08;以下简称 PSoC 6 RTT 开发板&#xff09;&#xff0c;该开发套件默认内置 RT-Thread 物联网操作系统。PSoC 6 RTT 开…

Matplotlib | 一文搞定Matplotlib从入门到实战演练!

文章目录 1 什么是Matplotlib1.1 Matplotlib的安装1.2 Matplotlib的基本使用 2 绘制直线3 绘制折线设置标签文字和线条粗细设置中文标题风格的设置 4 绘制曲线绘制曲线yx^2绘制正弦曲线和余弦曲线画布分区 5 绘制散点图绘制不同种类不同颜色的线 6 绘制条形图&#xff08;柱状&…

计算机网络 ---- OSI参考模型TCP/IP模型

目录 一、OSI参考模型 1.1 学习路线 1.2 OSI参考模型和TCP/IP模型 1.3 具体设备与具体层次对应关系 1.3.1 物理层 1.3.2 数据链路层 1.3.3 网络层 1.3.4 传输层 1.3.5 会话层、表示层、应用层 1.4 各层次数据传输单位 二、TCP/IP模型 2.1 学习路线 2.2 TCP/I…

对 JavaScript 原型的理解

笔者看了一些有关 JavaScript 原型的文章有感而发&#xff0c;就将所感所悟画了下来如果有理解错误和不足的地方&#xff0c;欢迎各位大佬指出&#xff0c;笔者感激不尽

【Django5】django的helloworld

安装django pip install djangoDjango官方中文文档 https://docs.djangoproject.com/zh-hans/5.1/Github链接 https://github.com/django/django创建Django项目 cd到想要创建项目的文件夹下&#xff0c;输入以下命令创建项目 这行代码将会在当前目录下创建一个 mysite 目录 …

9月26日云技术研讨会 | SOA整车EE架构开发流程及工具实施方案

面向服务的架构&#xff08;Service Oriented Architecture, SOA&#xff09;实施需要复杂的基础技术作为支撑&#xff0c;伴随着整车硬件资源的集中化、车载以太网等高速通信技术在车内的部署&#xff0c;将在未来一段时间内成为行业技术研究和市场布局的热点。 近年来&#x…

AD域控服务器

1.AD域控服务器安装 2.客户端Windows10加入域环境 3.组织单位OU和域用户创建 目的是分部门管理用户和使用域用户登录客户端 4.域用户安全策略 5.当客户端密码锁住了,管理员解锁账户。 6.只允许域用户使用自己的电脑 7.域策略 7.1统一客户端桌面壁纸 7.2重定向用户配置文件路径…

【macOS】【zsh报错】zsh: command not found: python

【macOS】【zsh Error】zsh: command not found: python 本地已经安装了Python&#xff0c;且能在Pycharm中编译Python程序并运行。 但是&#xff0c;在macOS终端&#xff0c;运行Python&#xff0c;报错。 首先要确认你在macOS系统下&#xff0c;是否安装了Python。 如果安…

每日刷题(算法)

我们N个真是太厉害了 思路&#xff1a; 我们先给数组排序&#xff0c;如果最小的元素不为1&#xff0c;那么肯定是吹牛的&#xff0c;我们拿一个变量记录前缀和&#xff0c;如果当前元素大于它前面所有元素的和1&#xff0c;那么sum1是不能到达的值。 代码&#xff1a; #def…

ElK 8 收集 Nginx 日志

1. 说明 elk 版本&#xff1a;8.15.0 2. 启个 nginx 有 nginx 可以直接使用。我这里是在之前环境下 docker-compose.yml 中启动了个 nginx&#xff1a; nginx:restart: alwaysimage: nginx:1.26.1ports:- "80:80"- "443:443"volumes:#- ./nginx/html:/…

Eigen3 教程基础篇(三)

参考 Eigen3 主页&#xff0c;Eigen3 官网教程 矩阵的本质&#xff0c;通过多种矩阵的应用去感受矩阵本质 3Blue1Brown 的线性代数&#xff0c;用可视化方法来表现线性代数的特性&#xff0c;强推 如何理解复数和虚数&#xff0c;有动画方便理解复数的意义 相关文章 Eigen…