想要自学机器视觉有关的知识,在网上摸索了好久,才了解到了OpenCV。但OpenCV开发环境是C++,可我只会点C#与VB。正琢磨学习C++,又了解到Emgu CV(OpenCV for C#),真是欣喜若狂。找到EmguCV入门指南,如奉至宝,赶紧依样画瓢,争取入门。为了加深记忆,在此做学习笔记。
下载Emgu CV安装以后,参考http://hi.baidu.com/mvp_xuan/item/144c6ddfebb1413de3108fd1,每次新建项目,应先导入UI插件,然后添加引用。具体方法如下:
导入UI插件:点击“工具(T)” -> “选择工具箱项(X)…” ,在新打开的窗口中选择:“.NET Framework组件”,点击“浏览”,到目录:C:\Emgu\emgucv-windows-x86 2.3.0.1416\bin下,双击Emgu.CV.UI.dll即可。
看到如图四项之后,点击确定即可。
添加引用:右键单击“解决方案资源管理器”中刚才所建项目下的“引用”,选择“添加引用”;在新弹出的窗口中选择“浏览”,到安装目录:C:\Emgu\emgucv-windows-x86 2.3.0.1416\bin下,选择:Emgu.CV.dll、Emgu.CV.ML.dll、Emgu.CV.UI.dll、Emgu.Util.dll、ZedGraph.dll等共五个DLL文件,并点击确定加入。如下图所示即可:
现在开始示例学习。
第一个示例:Hello World in CSharp
Hello World - Version 1----这个是利用窗口显示Hello Word的例子。先新建窗口应用程序,删除Form1,在Program.cs中注释或删除行“Application.Run(new Form1());”,然后添加代码。如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
//增加
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using System.Drawing;
namespace Hello_World___Version_1
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
string win1 = "测试窗口";
//创建测试窗口
CvInvoke.cvNamedWindow(win1);
//创建400*200的蓝色图像
using (Image<Bgr, Byte> img = new Image<Bgr, byte>(400, 200, new Bgr(255, 0, 0)))
{
//文字
MCvFont f = new MCvFont(FONT.CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0);
//用定义的文字在图上画"Hello,World."
img.Draw("Hello,World.", ref f, new Point(10, 80), new Bgr(0, 255, 0));
//显示图像
CvInvoke.cvShowImage(win1, img.Ptr);
//等待按键事件
CvInvoke.cvWaitKey(0);
//释放窗口
CvInvoke.cvDestroyWindow(win1);
}
}
}
}
运行后如下图:
Hello World - Version 2----用ImageViewer类显示图像。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
//增加
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.CV.UI;
using System.Drawing;
namespace Hello_World___Version_1
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
//创建400*200的蓝色图像
using (Image<Bgr, Byte> img = new Image<Bgr, byte>(400, 200, new Bgr(255, 0, 0)))
{
//文字
MCvFont f = new MCvFont(FONT.CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0);
//用定义的文字在图上画"Hello,World."
img.Draw("Hello, world", ref f, new Point(10, 80), new Bgr(0, 255, 0));
//用Emgu.CV.UI名称空间下的ImageViewer类显示图像
ImageViewer.Show(img, "Test Window");
}
}
}
}
运行后如下图: