前言:项目需要,需使用图像处理来完成机械臂从运动的皮带上抓取物体的功能,所以又重拾视觉与图像处理内容。
内容:Emgu是OpenCV的一个跨平台的.NET封装,结构如下图所示:
下载地址:http://sourceforge.net/projects/emgucv/,下载最新版本的就好。
运行下载的EXE文件,完成后添加环境变量:我的电脑->属性->高级系统设置->环境变量->编辑或者新建PATH变量,添加安装目录下bin文件所在的路径,
如";F:installemguemgucv-windows-universal 3.0.0.2157in",保存即完成配置。
配置完成后,可以打开VS软件测试一下。我用的是VS2015,没有摄像头,仅写个简单的读取图片处理,程序如下:

1 using System.Windows; 2 using Emgu.CV; 3 using Emgu.CV.Structure; 4 using Emgu.CV.WPF; 5 using Microsoft.Win32; 6 7 namespace OpenImage 8 { 9 /// <summary> 10 /// MainWindow.xaml 的交互逻辑 11 /// </summary> 12 public partial class MainWindow : Window 13 { 14 private Image<Bgr, byte> _originalImage;//原始图像 15 private Image<Gray, byte> _processImage;//处理后得到的图像 16 public MainWindow() 17 { 18 InitializeComponent(); 19 } 20 21 //打开按钮事件,使用对话框形式选择图像打开并显示 22 private void buttonOpen_Click(object sender, RoutedEventArgs e) 23 { 24 OpenFileDialog openFile = new OpenFileDialog(); 25 openFile.InitialDirectory = @"G:oe桌面图片"; 26 if (openFile.ShowDialog()==true) 27 { 28 if (openFile.FileName != null) 29 { 30 _originalImage = new Image<Bgr, byte>(openFile.FileName); 31 originalImageBox.Source = BitmapSourceConvert.ToBitmapSource(_originalImage); 32 } 33 } 34 } 35 36 //对原始图像进行Canny处理并将结果显示出来 37 private void buttonProcess_Click(object sender, RoutedEventArgs e) 38 { 39 _processImage = _originalImage.Canny(80,200,3,true); 40 processedImageBox.Source = BitmapSourceConvert.ToBitmapSource(_processImage); 41 42 } 43 } 44 }
程序中需要添加bin文件下的Emgu.CV、Emgu.CV.UI、Emgu.Util引用,并需要将Emgu.CV.WPF中的BitmapSourceConverter.cs文件添加到项目中,以便显示图片。
程序运行结果如下图所示:
这样的话,就说明Emgu库是可以用的。
注意:程序刚开始运行的时候会出现一些错误,多数情况是缺少dll文件,可以针对不同的错误将相应的dll文件拷贝到debug文件夹中即可得到解决。