版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
笔者的博客网址: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方式显然更简单。