vs2010 c# EmguCV 环境的搭建和配置

时间:2021-09-27 18:59:06

最近做个项目在C#平台下制作的,需要用到模板匹配的功能,原来的模板匹配在C++  opencv下制作,遂打算使用EmguCV来做这项功能。

1.下载地址:https://sourceforge.net/projects/emgucv/files/emgucv/3.1.0/  

我下载的是:libemgucv-windesktop-3.1.0.2282.exe  本来下载的是libemgucv-windesktop-3.1.0.2504-r16.12.exe 最新版,但是发现有个异常

《弹窗”Emgu.CV.CvInvoke"的类型初始值设定项引发异常。》无法解决,按照网上能查到的方式均无法解决,感觉不像是动态库连接的问题,像是cvextern.dll有问题,于是退回到上个版本尝试。

2.下载完后,安装,一直下一步就可以了。

3.找到安装目录下

C:\Emgu\emgucv-windesktop 3.1.0.2282\Solution\VS2013-2015\Emgu.CV.Example.sln 打开,由于我的是VS2010,所以一路弹窗提示无法打开.shproj,不管点击确定

,最后进入程序,里面都是例程,找到一个应用程序项目,点击右键设为启动项目,就会运行。这里会出现个XXXX 签名档加密失败的问题。

 解决方法:   点击项目右键属性,弹出的窗口找到签名选项下,勾选掉为程序集签名这项,重新编译就没有问题了。


4. 移植到自己项目中(这里我们做个简易视频采集功能)

*新建winform项目

*添加Emgu工具箱------菜单》工具》选择工具箱选项》浏览找到Emgu.CV.UI.dll,添加后发现C# 工具箱中多了MarixBox,ImageBox等几项,将ImageBox拖动到窗体中

*添加引用Emgu.CV.World.dll,Emgu.CV.UI.dll

*代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.Util;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private Capture _capture = null;
      private bool _captureInProgress;


      public Form1()
      {
         InitializeComponent();
         CvInvoke.UseOpenCL = false;
         try
         {
            _capture = new Capture();
            _capture.ImageGrabbed += ProcessFrame;
              _capture.Start();
         }
         catch (NullReferenceException excpt)
         {
            MessageBox.Show(excpt.Message);
         }
          return;
      }


        private void ProcessFrame(object sender, EventArgs arg)
      {
         Mat frame = new Mat();
         _capture.Retrieve(frame, 0);
         Mat grayFrame = new Mat();
         CvInvoke.CvtColor(frame, grayFrame, ColorConversion.Bgr2Gray);
         Mat smallGrayFrame = new Mat();
         CvInvoke.PyrDown(grayFrame, smallGrayFrame);
         Mat smoothedGrayFrame = new Mat();
         CvInvoke.PyrUp(smallGrayFrame, smoothedGrayFrame);
         
         //Image<Gray, Byte> smallGrayFrame = grayFrame.PyrDown();
         //Image<Gray, Byte> smoothedGrayFrame = smallGrayFrame.PyrUp();
         Mat cannyFrame = new Mat();
         CvInvoke.Canny(smoothedGrayFrame, cannyFrame, 100, 60);


         //Image<Gray, Byte> cannyFrame = smoothedGrayFrame.Canny(100, 60);


         imageBox2.Image = frame;
        
      }


    }
}

*再将C:\Emgu\emgucv-windesktop 3.1.0.2282\bin 下的X64和X86目录,copy到我们debug目录下,编译后即打开我们笔记本摄像头,并将图像实时显示出来。

5.平台构建后,我们就可以尝试里面的各个算法运用到我们的软件中去了。

6.测试代码可到我的下载里寻找。