EmguCV学习笔记 VB.Net 12.1 二维码解析

news/2024/9/21 14:28:18 标签: 图像, 计算机视觉, vb.net, opencv, emgucv, 二维码, c#

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

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.1 二维码解析

QRCodeDetector类是Emgu CV库中用于检测和解码二维码的类。

常用方法:

1、Detect方法:检测图像中的QR二维码

Public Function Detect (input As IInputArray, points As IOutputArray) As Boolean

参数说明:

  1. Input:包含二维码的输入图像
  2. points:存储QR二维码位置信息。这是一个VectorOfPoint对象。

该方法执行成功,将返回二维码四个顶点坐标。

【代码位置:frmChapter12】Button1_Click

    '二维码检测

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim qr As New QRCodeDetector()

        '需要测试的图像文件

        Dim m As New Mat("C:\learnEmgucv\qrcode1.png", ImreadModes.Color)

        Dim vp As New VectorOfPoint

        '返回二维码四个顶点坐标

        If qr.Detect(m, vp) = False Then

            Exit Sub

        End If

        CvInvoke.Line(m, vp(0), vp(1), New MCvScalar(255, 0, 0), 2)

        CvInvoke.Line(m, vp(1), vp(2), New MCvScalar(255, 0, 0), 2)

        CvInvoke.Line(m, vp(2), vp(3), New MCvScalar(255, 0, 0), 2)

        CvInvoke.Line(m, vp(3), vp(0), New MCvScalar(255, 0, 0), 2)

        ImageBox1.Image = m

End Sub

输出结果如下图所示:

图12-1 获得二维码坐标位置

2、Decode方法:用于解码获得的QR二维码的内容。

Public Function Decode (image As IInputArray, points As IInputArray, Optional straightQrcode As IOutputArray = Nothing) As String

  1. Image:包含二维码的输入图像
  2. points:存储QR二维码位置信息。
  3. straightQrcode:经过校正后的二维码图像

该法方法执行成功,将返回二维码的文字内容。

【代码位置:frmChapter12】Button2_Click

   '二维码识别

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim qr As New QRCodeDetector()

        '需要测试的图像文件

        Dim m As New Mat("C:\learnEmgucv\qrcode2.png", ImreadModes.Color)

        Dim vp As New VectorOfPoint

        '返回二维码四个顶点坐标

        If qr.Detect(m, vp) = False Then

            Exit Sub

        End If

        Dim mout1 As Mat = m.Clone

        CvInvoke.Line(mout1, vp(0), vp(1), New MCvScalar(255, 0, 0), 2)

        CvInvoke.Line(mout1, vp(1), vp(2), New MCvScalar(255, 0, 0), 2)

        CvInvoke.Line(mout1, vp(2), vp(3), New MCvScalar(255, 0, 0), 2)

        CvInvoke.Line(mout1, vp(3), vp(0), New MCvScalar(255, 0, 0), 2)

        ImageBox1.Image = mout1

        Dim strout As String

        Dim mout2 As New Mat

        strout = qr.Decode(m, vp, mout2)

        ImageBox2.Image = mout2

        MessageBox.Show(strout)

End Sub

输出结果如下图所示:

 

图12-2 获得二维码信息

QRCodeDetector类也提供了同时对多个二维码检测和解码的方法,但是经过测试,效果不好。可以使用WeChatQRCode类来代替(请参看12.2节【WeChatQRCode】)。


http://www.niftyadmin.cn/n/5668940.html

相关文章

【React】(推荐项目)一个用 React 构建的 CRUD 应用程序

推荐项目:CRUD 应用示例 在本篇文章中,我想向大家推荐一个非常实用的项目:CRUD 应用示例。这个项目展示了如何使用现代技术栈创建一个基础的增删改查(CRUD)应用,非常适合用于学习和实践后端开发技能。 适…

Java 在 GIS 领域的学习路线?

Java是一门广泛应用于企业级开发的编程语言,而GIS则是一种常用于地理信息处理和分析的技术。将Java与GIS结合起来,可以在企业级应用中实现更多的功能和业务需求,且在实际领域越来越广泛。 Java在GIS中重要的作用 1、跨平台性 Java具有跨平台…

AIoT智能工控板

在当今竞争激烈的商业环境中,企业需要强大的科技力量来助力腾飞,AIoT智能工控板就是这样的力量源泉。 其领先的芯片架构设计,使得主板的性能得到了极大的提升。无论是数据的处理速度、图形的渲染能力,还是多任务的并行处理能力&a…

福禄克 PoE 工业以太网线缆验测仪

当用了福禄克的测试设备后就再也不会考虑其他的测试工具了。 看起来都差不多,各种 Cat 5 的测试工具都买了,从最便宜的 10 多块钱测线序的到右边用的这个 40 多块钱的。 右边这个让人非常恼火的就是经常性测不准。 见过测 POE 的乱跳,完全不…

Java 之泛型详解

1. 泛型是什么? 泛型是 Java 中一种强大的机制,它允许你编写可以与多种数据类型一起工作的代码,而无需在编译时指定具体的类型。这样可以提高代码的灵活性、可读性和安全性。 2. 为什么要使用泛型? 泛型可以帮助我们编写更安全…

Typora安装和导入导出

Typora安装和导入导出 文章目录 Typora安装和导入导出前言Typora v1.9.5Typora v1.4.7Pandoc 前言 Typora v1.9是最新版, , Typora v1.4是老版本的, 这两个选择一个即可Pandoc可以导入导出word Typora v1.9.5 Typora v1.9.rar, 提取码:tian按ctrl单击鼠标左键打开…

基于嵌入式的智能物流柜( 触摸屏/0.96寸oled屏)

演示 智能物流柜(基础版) 智能物流柜(升级版) 前言 这是本人在大二在学校接的一个简单的实验室项目,之前发布了一个,由于那是在暑假,家里器材有限,代码敲完之后,用面包板…

Intel架构的基本知识

1.字节序 CPU的字节序分为LittleEndian和BigEndian。 所谓Endian,就是多字节数据在内存中的排列方式。 例如,假设有一个整数0x11223344: LittleEndian的排列方式是,从内存的低地址开始,依次存放 0x44 0x33 0x22 0x11; BigEndian的排列方式是,从内存的低地址开始,依…