zoukankan      html  css  js  c++  java
  • Emgu CV的配置以及在VS 2012中进行图像处理的步骤和实例

    说明:

    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不一样)

    作者:xh6300

    --------------------------------------------

    本文系原创作品,转载请注明出处。如果您认为文章对您有帮助,可以点击下方的【好文要顶】或【关注我】;如果您想进一步表示感谢,可以通过网页右侧的【打赏】功能对我进行打赏。感谢您的支持,我会继续写出更多对大家有帮助的文章!文章有不理解的地方欢迎跟帖交流,博主经常在线!^_^

  • 相关阅读:
    查看变量是否删除在鼠标工具中用到了。
    poly 顶点坐标的函数
    out/target/product/generic/obj/EXECUTABLES/BufferQueue_test_intermediates/LINKED/BufferQueue_test] Error 1
    undefined reference to `pthread_mutexattr_destroy'
    [out/host/linuxx86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] Error 1
    can't find a register in class `GENERAL_REGS' while reloading `asm'
    error: ‘ptrdiff_t’ does not name a type
    armeabi4.4.3 引起的错误
    error: "_FORTIFY_SOURCE" redefined [Werror]
    :0:0: 错误: “_FORTIFY_SOURCE”重定义 [Werror]
  • 原文地址:https://www.cnblogs.com/xh6300/p/5941986.html
Copyright © 2011-2022 走看看