EmguCV学习笔记 VB.Net 第1章 EmguCV

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

EmguCV学习笔记目录 Vb.net

EmguCV学习笔记目录 C#

笔者的博客网址:VB.Net-CSDN博客****

教程相关说明以及如何获得pdf教程和代码(博客上的教程内容会和pdf教程一致,教程中也会包含所有代码),请移步:EmguCV学习笔记****

第1章 EmguCV

1.1 EmguCV

1.1.1 OpenCV

OpenCV是一个开源免费的计算机视觉库,由Intel公司发起并维护,现在由openCV.org维护。它是跨平台的,支持Windows、Linux、macOS和Android等多种操作系统,提供了C++、Python、Java和MATLAB等多种编程语言的接口。

OpenCV库提供了大量计算机视觉相关的函数库,包括图像处理、图像分割、目标检测、机器学习等领域。它可以对图像和视频进行处理、分析和识别,广泛应用于计算机视觉、机器人、自动驾驶、人工智能、医学图像处理等领域。OpenCV库使用C++编写,采用优化算法和多线程技术,具有高效性能。同时,OpenCV库有庞大的社区支持,提供了大量的教程、文档和示例代码,可以帮助开发者快速实现各种图像和视频处理任务。

但是OpenCV没有提供供C#和VB.NET使用的库。

1.1.2 EmguCV简介

EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它是一个开源、免费的计算机视觉库。EmguCV提供了C#和VB.NET等语言的接口,方便.Net开发者使用,它向C#和VB.NET开发者提供了OpenCV库的大部分功能,包括图像和视频处理、特征提取、目标检测、机器学习等。而且EmguCV提供了简单易用的API接口,可以快速上手进行图像和视频处理任务。

1.2 EmguCV安装

笔者在开始学习的时候仍然使用的是Vs2015,使用的EmguCV是4.0的版本,手里的教程是3.0的版本,感觉教程和实际完全不一样,不得已,只好使用3.0的版本。从网上好不容易找到安装包,然后解压,安装,新建项目,引用Dll......一套流程下来很是复杂。

由于新换了一台电脑,为了不至于太落后,使用的是Vs2022,然后想下载最新的EmguCV来学习开发,于是乎下载了当时最新的4.5.1.4349,但是使用的时候感觉,还是完全和之前学习的3.0版本是两码事。

图1-1 仍然有3个版本的EmguCV静静地躺在我的电脑里

笔者从Vs自带的NuGet下载了最新版本的EmguCV开发,果然顺利多了。建议大家开发的时候还是使用NuGet提供的EmguCV,直接下载使用,不要再去下载安装包。

具体操作如下:

新建一个【Windows窗体应用(.NET Framework)】项目。

图1-2 新建项目

进入新建的项目后,依次点击菜单栏【工具】|【NuGet包管理器】|【管理解决方案的NuGet程序包(N)...】。

图1-3 点击【管理解决方案的NuGet程序包(N)...】

点击【浏览】,输入"emgucv",此时会出来一大堆相关结果。

选择Emgu.CV、Emgu.CV.Bitmap、Emgu.CV.UI这3个进行安装。截止当前,EmguCV版本为4.7.0.5276。

图1-4 NuGet中下载Emgu.CV

例如安装Emgu.CV选中Emgu.CV,然后在右侧勾选当前项目,本例中是"learnEmgucv",可以看到此时是"未安装",点击【安装】按钮开始安装。

图1-5 安装Emgu.CV到当前项目

安装中途,会要求接受许可才能继续安装。点击【I Accept】按钮。

图1-6 接受许可证

全部安装完后,特别是安装完Emgu.CV.UI后,进入编辑窗口,会看到工具栏多了几个EmguCV的控件。

图1-7 新增的Emgu.CV相关控件

向窗体添加一个ImageBox控件,它和VB.Net自带的PictureBox控件有点类似,选中ImageBox控件后,在【属性】窗口内设置SizeMode属性为StretchImage。

图1-8 添加ImageBox控件

双击窗口空白位置进入代码编写。

【代码位置:frmChapter1】Button1_Click

在所有代码最前面添加引用:

Imports Emgu.CV

Imports Emgu.CV.[Structure]

**注意:**后面的代码中可能还会引用到:

Imports Emgu.Util

Imports System.Runtime.InteropServices

Imports Emgu.CV.CvEnum

Imports Emgu.CV.UI

......

通常不必专门去引用,笔者使用Vs2022时,发现它会自动增加对以上命名空间的引用。

在窗体载入事件中添加代码:

【代码位置:frmChapter1】Button1_Click

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

Dim img As New Image(Of Bgr, Byte)("C:\learnEmgucv\lena.jpg")

ImageBox1.Image = img

End Sub

运行后会提示错误。。。。

此时还需要做一个工作,将笔者提供的配套文件中的X86文件夹(32位程序开发)或X64文件夹(64位程序开发)拷贝到对应的Debug目录下面。

再次运行后如下图所示:

图1-9 通过EmguCV显示图片

在ImageBox控件窗口内,可以通过鼠标实现放大缩小,可以通过点击鼠标右键菜单实现更多功能。

备注: Lena Forsen 是70年代一本瑞典杂志《花花公子》的模特,她在杂志上的一幅照片被 USC 的两名研究员用来测试一个图像压缩算法,于1972年出现在Lena问题的论文中。这张图片的尺寸是512*512像素,有256个灰度级别,包含了人物、头发、纹理、阴影等多种元素,非常适合用于测试和演示各种图像处理算法和技术。后来,人们将lena的黑白照片转换为彩色图像。现在,这张照片在现代计算机图像处理中已经成为了一个经典的测试图像,而彩色版本的Lena图片则可以更好地展示和比较各种图像处理算法和技术的效果。本学习笔记大多代码也是使用的Lena的彩色图像。

【代码位置:frmChapter1】Button2_Click

另外,还可以通过cvinvoke类打开一个包含了图像的窗口,新建一个按钮【Button1】,将一下代码增加到按钮的Click事件中:

'使用CvInvoke.Imshow来显示图像

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

Dim img As New Image(Of Bgr, Byte)("C:\learnEmgucv\lena.jpg")

CvInvoke.Imshow("img", img)

End Sub

当按下【Button1】后,就会出现一个包含了Lean图像的窗口。

CvInvoke类提供了很多静态方法,它封装了OpenCV中很多处理图像的函数。这里使用了CvInvoke的Imshow方法来显示一张图片。在之后的代码中会慢慢讲解CvInvoke类的其他方法。

至此,验证安装是否成功的工作完成,就可以进入正式开发了。

相比下载EmguCV的安装包,设置全局变量、设置引用。通过NuGet方式显然更简单。

相关推荐
喵叔哟1 小时前
【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--访问权限中间件
微服务·中间件·.net
咩咩觉主2 小时前
尽量通俗易懂地概述.Net && U nity跨语言/跨平台相关知识
unity·c#·.net·.netcore
Jack黄从零学c++2 小时前
opencv(c++)图像的灰度转换
c++·人工智能·opencv
青龙摄影4 小时前
【监控】如何调出电脑的中摄像头,从摄像头获取视频流
人工智能·opencv·计算机视觉
CP-DD4 小时前
OpenCV DNN
人工智能·opencv·dnn
喵叔哟6 小时前
【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--角色可访问接口管理
数据库·微服务·.net
慕容复之巅17 小时前
基于MATLAB+opencv人脸疲劳检测
开发语言·opencv·matlab
西木九1 天前
解决:WSL2可视化opencv和pyqt冲突:QObject::moveToThread
python·opencv·pyqt
小码编匠1 天前
.NET 9 发布 性能提升、AI 支持与全方位改进
人工智能·后端·.net