关于EMGU CV的那些事——1.环境搭建(win8 vs2012 emgucv3.0)

转载 2016年07月14日 14:57:45
 

关于EMGU CV的那些事——1.环境搭建(win8 vs2012 emgucv3.0)

分类: EMGU CV 1590人阅读 评论(0) 收藏 举报

楼主读研阶段研究图像处理,想用C#实现PTAM/PTAMM算法并用UNITY创建相关应用。对于PTAM(Parallel Tracking and Mapping)算法,使用了大量的第三方库,实现语言是C/C++。之所以选择C#,是因为楼主想要使用Unity将PTAM算法用于AR系统。那么问题来了,C/C++处理图像使用Open CV,C#就只能使用Open CV的兄弟Emgu CV了,Emgu CV对Open CV的函数进行了封装,使其能运行在.net环境中。

首先我们到Emgu CV的官网那个下载最新3.0.0-rc1版本(http://sourceforge.net/projects/emgucv/files/emgucv/),对应封装的是3.0.0-rc1版本的Open CV。注意我们不需要安装Open CV!对于普通版和CUDA版,如果你不涉及显卡编程的话,没区别。如果需用CUDA或OpenCL对显卡编程,则需要下载CUDA版。楼主认为以后的图像处理,极有可能广泛应用显卡编程。

下载完后,安装或解压。(楼主机子为windows 8.1 64位系统,IDE为VS2012 Update4.)开始配置环境变量。在用户变量里新建PATH,里面填上安装或解压后的Emgu目录下的bin和bin里的x86和x64。如下图所示:(32位只需x86,64位需加上x64)


完成后注销或重启。打开VS2012,新建一个C# windows窗体应用程序(注意如果想以后使用unity的话,.net framework应该选3.5一下),打开 工具-选择工具箱项 浏览添加Emgu.CV.UI.dll(在bin目录里),然后右键 解决方案资源管理器里-引用-添加引用-浏览 添加bin目录下的Emgu.CV.dll、Emgu.CV.ML.dll、Emgu.CV.UI.dll、Emgu.Util.dll、ZedGraph.dll共五个DLL文件即可完成配置。注意每次新建一个工程都需要这一步。

接下来奉上图片读取和灰度处理的代码:(需在头部加上using Emgu.CV; using Emgu.Util;)

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9.   
  10. using System.Diagnostics;  
  11. using Emgu.CV;  
  12. using Emgu.Util;  
  13.   
  14. namespace EMGU_STUDY_1._0  
  15. {  
  16.     public partial class Form1 : Form  
  17.     {  
  18.         Mat img1 = null;  
  19.         Mat img2 = null;  
  20.         Mat img3 = null;  
  21.         Stopwatch sw = new Stopwatch();  
  22.         public Form1()  
  23.         {  
  24.             InitializeComponent();  
  25.         }  
  26.   
  27.         private void button1_Click(object sender, EventArgs e)  
  28.         {  
  29.             OpenFileDialog lvse = new OpenFileDialog();  
  30.             lvse.Title = "选择图片";  
  31.             lvse.InitialDirectory = "";  
  32.             lvse.Filter = "图片文件|*.bmp;*.jpg;*.jpeg;*.gif;*.png";  
  33.             lvse.FilterIndex = 1;  
  34.   
  35.             if (lvse.ShowDialog() == DialogResult.OK)  
  36.             {  
  37.                 textBox1.Text = null;  
  38.                 sw.Reset();  
  39.                 sw.Start();  
  40.   
  41.                 img1 = CvInvoke.Imread(lvse.FileName, Emgu.CV.CvEnum.LoadImageType.AnyColor);  
  42.                 imageBox1.Width = img1.Width / 2;  
  43.                 imageBox1.Height = img1.Height / 2;  
  44.                 imageBox1.Image = img1;  
  45.   
  46.                 sw.Stop();  
  47.                 textBox1.Text = sw.ElapsedMilliseconds.ToString();  
  48.             }  
  49.   
  50.         }  
  51.   
  52.         private void button2_Click(object sender, EventArgs e)  
  53.         {  
  54.             if (img1 != null)  
  55.             {  
  56.                 img2 = new Mat(img1.Rows, img1.Cols, Emgu.CV.CvEnum.DepthType.Cv8U, 1);  
  57.                 textBox2.Text = null;  
  58.                 sw.Reset();  
  59.                 sw.Start();  
  60.   
  61.                 CvInvoke.CvtColor(img1, img2, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);  
  62.                 imageBox2.Width = img2.Width / 2;  
  63.                 imageBox2.Height = img2.Height / 2;  
  64.                 imageBox2.Image = img2;  
  65.   
  66.                 sw.Stop();  
  67.                 textBox2.Text = sw.ElapsedMilliseconds.ToString();  
  68.             }  
  69.         }  
  70.   
  71.         private void button3_Click(object sender, EventArgs e)  
  72.         {  
  73.             textBox3.Text = null;  
  74.             OpenFileDialog lvse = new OpenFileDialog();  
  75.             lvse.Title = "选择图片";  
  76.             lvse.InitialDirectory = "";  
  77.             lvse.Filter = "图片文件|*.bmp;*.jpg;*.jpeg;*.gif;*.png";  
  78.             lvse.FilterIndex = 1;  
  79.             if (lvse.ShowDialog() == DialogResult.OK)  
  80.             {  
  81.                 sw.Reset();  
  82.                 sw.Start();  
  83.   
  84.                 img3 = CvInvoke.Imread(lvse.FileName, Emgu.CV.CvEnum.LoadImageType.Grayscale);  
  85.                 imageBox3.Width = img3.Width/2;  
  86.                 imageBox3.Height = img3.Height/2;  
  87.                 imageBox3.Image = img3;  
  88.   
  89.                 sw.Stop();  
  90.                 textBox3.Text = sw.ElapsedMilliseconds.ToString();  
  91.             }  
  92.         }  
  93.   
  94.         private void button4_Click(object sender, EventArgs e)  
  95.         {  
  96.             img1 = null;  
  97.             img2 = null;  
  98.             img3 = null;  
  99.             imageBox1.Image = null;  
  100.             imageBox2.Image = null;  
  101.             imageBox3.Image = null;  
  102.             textBox1.Text = null;  
  103.             textBox2.Text = null;  
  104.             textBox3.Text = null;  
  105.         }  
  106.     }  
  107. }  

代码里创建里三个imagebox控件。imagebox1显示由button1加载的彩色图片,imagebox2显示imagebox1中彩色图片通过灰度处理后的灰度图片,imagebox3显示由button3加载的灰度图片。button2使用的是灰度处理函数CvInvoke.CvtColor(),将已经加载好的彩色图像转化为灰度图像。button3中直接在加载时就处理为灰度图像。 本程序还使用Stopwatch计时器对三个过程进行了计时,分别显示在对应的textbox里。

(PS: 对于button2里的灰度处理过程,第一次运行的时间长达200ms+,之后每次在3ms左右,楼主估计是第一次从库中检索并加载灰度处理函数的时间,之后都是直接调用,所以3ms为灰度处理过程的时间。)

欢迎大家给出意见,共同学习!

【EMGUCV】图像的直方图均衡化增强

原理比较简单: 对某个通道的图像或者灰度图进行图像增强,图像增强的方式可以多种,这里是采取的是直方图均衡化,然后在进行二值化,腐蚀或者膨胀得到最终的二值化图像。void imgEnhance(Ima...
  • jaych
  • jaych
  • 2017年05月24日 07:23
  • 1003

利用边缘改进全局阈值处理-c#实现-基于EmguCv

关于边缘改进全局阈值处理基本实现是:  1.先计算其边界,利用拉普拉斯或者梯度变换都以。  2.计算变化后边界图像的绝对值 3.指定一个阈值(一般以百分比的形式指定,比如我指定90%,如果存在有...
  • anjisi
  • anjisi
  • 2016年09月22日 02:40
  • 1066

C#下用Emgucv对图片进行灰度化、二值化、边缘检测、膨胀腐蚀运算、霍夫变换进行表格识别

其中每个部分的原理相信在各种书籍和网站上都容易找到,这里是C#下用Emgucv实现以上相关操作的源代码全部,转载请注明http://write.blog.csdn.net/postlist http:...

Emgucv3.0的安装与配置

首先感谢qq群512782650,这是一个Emgucv爱好者创立的群,里面确实有许多爱好者。 这篇博客旨在教学Emgucv3.0的安装与配置。 环境:vs2015+Emgucv3.0 Emgu ...

Win10(64bit)+Emgu CV3.0.0+VS2013 下载&安装&配置

EmguCv是在.net平台上对OpenCV的封装,便于OpenCV的跨平台开发使用。

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

【Emgu】一起学EmguCV(一)配置与使用

转载自:http://www.cnblogs.com/bomo/archive/2013/03/28/2986113.html 【Emgu】一起学EmguCV(一)配置与使用 ...

Emgu CV--基础知识

首先由于最近需要,要学习一下Emgu CV的相关知识。由于需要做的东西只是一些简单的东西,在这里先了解一下基础知识,与大家共同学习   一 Emgu CV与OpenCV的关系    Emgu C...

Emgu CV 第一个实例

Emgu CV下载地址 http://sourceforge.net/projects/emgucv/files/ 找最新的下就行了,傻瓜式安装,选择目录后自动完成安装,然后提示安装VS2008和...

关于EMGU CV的那些事——1.环境搭建(win8 vs2012 emgucv3.0)

楼主读研阶段研究图像处理,想用C#实现PTAM/PTAMM算法并用UNITY创建相关应用。对于PTAM(Parallel Tracking and Mapping)算法,使用了大量的第三方库,实现语言...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于EMGU CV的那些事——1.环境搭建(win8 vs2012 emgucv3.0)
举报原因:
原因补充:

(最多只允许输入30个字)