说明:
1、所使用的Emgu CV是目前的最新版本3.1.0,下载链接为:https://sourceforge.net/projects/emgucv/files/emgucv/3.1.0/(我选的下载量最多的那个版本,40.3MB)
2、经测试,在VS 2012中调用Emgu CV进行编程,不需要先安装OpenCV。
3、可以不配置环境变量,也可以配置环境变量,具体后面有说明。
4、目前本人的计算机系统是Windows 7 64位,但是在项目的属性中,只有将目标平台设置为x86才行。
安装和配置步骤:
1、安装下载的可执行程序,全部按照默认设置。这个版本的EmguCV默认安装的话,它的路径是:C:Emguemgucv-windesktop 3.1.0.2282
2、配置环境变量,在系统变量中找到Path或者PATH(如果没有则新建Path),然后在最前面添加(如果你安装时选的不是默认安装路径,可能会有不同):
C:Emguemgucv-windesktop 3.1.0.2282inx64;C:Emguemgucv-windesktop 3.1.0.2282in;C:Emguemgucv-windesktop 3.1.0.2282inx86;
如果是你的本账户使用,也可以在“用户变量”中新建Path,然后将上面的三条路径添加进去。如果想让所有用这台计算机的人使用,则推荐在“系统变量”的Path中添加这些路径。
如果不想配置环境变量,那么需要将原EmguCV的安装目录的bin文件下的x86文件夹整个拷到当前程序的Debug目录下:
3、打开VS 2012 ,新建一个Winform程序。在“工具箱”中右键“选择项”,添加Emgu.CV.UI.dll(在EmguCV安装的bin目录中),添加以后,在“工具箱”的“所有Windows窗体”中会多出来4个控件:
4、在“解决方案资源管理器”中,添加“引用”,在本版本的EmguCV中,dll的数量得到了整合,一眼看去“估计”有用的dll一共只有4个:
本例中,我们需要导入:Emgu.CV.UI.dll、Emgu.CV.World.dll
5、然后在程序中导入命名空间:using Emgu.CV;
6、然后拖3个ImageBox到主窗体,拖3个TextBox和4个Button到主窗体,如图所示:
功能说明:点击button1添加图片并显示到ImageBox1中;点击button2将ImageBox1中的图片去色,并将灰度图显示到ImageBox2中;点击button3直接载入新的图片并去色,然后显示到ImageBox3中;点击button4清除所有的图片和文本框中的内容。
完整程序如下所示:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; namespace WindowsFormsApplication8 { public partial class Form1 : Form { Mat img1 = null; Mat img2 = null; Mat img3 = null; Stopwatch sw = new Stopwatch(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog lvse = new OpenFileDialog(); lvse.Title = "选择图片"; lvse.InitialDirectory = ""; lvse.Filter = "图片文件|*.bmp;*.jpg;*.jpeg;*.gif;*.png"; lvse.FilterIndex = 1; if (lvse.ShowDialog() == DialogResult.OK) { textBox1.Text = null; sw.Restart(); img1 = CvInvoke.Imread(lvse.FileName, Emgu.CV.CvEnum.LoadImageType.AnyColor); imageBox1.Width = img1.Width / 2; imageBox1.Height = img1.Height / 2; imageBox1.Image = img1; sw.Stop(); textBox1.Text = sw.ElapsedMilliseconds.ToString(); } } private void button2_Click(object sender, EventArgs e) { if (img1 != null) { img2 = new Mat(img1.Rows, img1.Cols, Emgu.CV.CvEnum.DepthType.Cv8U, 1); textBox2.Text = null; sw.Reset(); sw.Start(); CvInvoke.CvtColor(img1, img2, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray); imageBox2.Width = img2.Width / 2; imageBox2.Height = img2.Height / 2; imageBox2.Image = img2; sw.Stop(); textBox2.Text = sw.ElapsedMilliseconds.ToString(); } } private void button3_Click(object sender, EventArgs e) { textBox3.Text = null; OpenFileDialog lvse = new OpenFileDialog(); lvse.Title = "选择图片"; lvse.InitialDirectory = ""; lvse.Filter = "图片文件|*.bmp;*.jpg;*.jpeg;*.gif;*.png"; lvse.FilterIndex = 1; if (lvse.ShowDialog() == DialogResult.OK) { sw.Reset(); sw.Start(); img3 = CvInvoke.Imread(lvse.FileName, Emgu.CV.CvEnum.LoadImageType.Grayscale); imageBox3.Width = img3.Width / 2; imageBox3.Height = img3.Height / 2; imageBox3.Image = img3; sw.Stop(); textBox3.Text = sw.ElapsedMilliseconds.ToString(); } } private void button4_Click(object sender, EventArgs e) { img1 = null; img2 = null; img3 = null; imageBox1.Image = null; imageBox2.Image = null; imageBox3.Image = null; textBox1.Text = null; textBox2.Text = null; textBox3.Text = null; } } }
注意:项目的属性和配置管理器设置如下:
配置错误了则会报以下错误:
后来我又用一台安装有Windows 10 64位操作系统的计算机试了一下,配置为Any CPU或者x86、x64都能正常运行,并不报错。
参考资料:
1、关于EMGU CV的那些事——1.环境搭建(win8 vs2012 emgucv3.0) (这个例子中用的EmguCV版本不是最新版本,“引用”中添加的dll不一样)