最近做个项目在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.测试代码可到我的下载里寻找。