说明:

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:\Emgu\emgucv-windesktop 3.1.0.2282

 

2、配置环境变量,在系统变量中找到Path或者PATH(如果没有则新建Path),然后在最前面添加(如果你安装时选的不是默认安装路径,可能会有不同):

C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64;C:\Emgu\emgucv-windesktop 3.1.0.2282\bin;C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x86;

 

如果是你的本账户使用,也可以在“用户变量”中新建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不一样)

posted on 2016-10-09 13:59  xh6300  阅读(7928)  评论(0编辑  收藏  举报