http://blog.csdn.net/aptx704610875/article/details/46045689

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

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

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

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

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

  1. 深度学习环境搭建:Tensorflow1.4.0+Ubuntu16.04+Python3.5+Cuda8.0+Cudnn6.0

    目录 深度学习环境搭建:Tensorflow1.4.0+Ubuntu16.04+Python3.5+Cuda8.0+Cudnn6.0 Reference 硬件说明: 软件准备: 1. 安装Ubuntu ...

  2. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  3. 深度学习环境搭建:window10+CUDA10.0+CUDNN+pytorch1.2.0

    去年底入手一台联想Y7000P,配置了Nvidia GeForce GTX 1660 Ti GPU,GPU内存6G,但是因为有GPU服务器,所以一直没有在这台笔记本上跑过模型,如今经过一番折腾,终于在 ...

  4. cocos2dx 环境搭建 win7 +vs2012+ cocos2dx-2.1.4

    转自:http://my.eoe.cn/swer03160828/archive/20067.html 1) 如果在win32 下面编写的cocos2dx 的代码其文件 .cpp,.h 的文件,基本上 ...

  5. cocos2d-x环境搭建(win7+cocos2d-x-3.0)

    一.环境需准备的材料: 1.VS2012,下载地址:官网 2.cocos2d-x和cocostudio,下载地址:官网 3.eclispe,我用的是:adt-bundle-windows-x86_64 ...

  6. node+webpack环境搭建 vue.js 2.0 基础学习笔记

    npm install -g vue //全局安装vue npm install -g webpack //全局安装webpack npm install -g vue-cli //全局安装vue-c ...

  7. Emgu CV的配置以及在VS 2012中进行图像处理的步骤和实例

    说明: 1.所使用的Emgu CV是目前的最新版本3.1.0,下载链接为:https://sourceforge.net/projects/emgucv/files/emgucv/3.1.0/(我选的 ...

  8. Emgu CV 初试

    Emgu CV 是.NET平台下对OpenCV图像处理库的封装,也就是.NET版.可以运行在C#.VB.VC++等. 安装完成后需要设置环境变量,比如我安装在D:\Emgu\emgucv-window ...

  9. Emgu.CV怎么加载Bitmap

    EmguCV 在4.0.1版本之后没办法用Bitmap创建Image了. 我给大家说下 EmguCV怎么加载Bitmap 下边是 EmguCV 官方文档写的,意思是从4.0.1以后的版本不能直接Bit ...

随机推荐

  1. Python+MySQL开发医院网上预约系统(课程设计)二

    ---恢复内容开始--- 1:报错 1.1.创建表时报错 CREATE TABLE Admin (        A_ID VARCHAR(20) NOT NULL AUTO_INCREMENT, p ...

  2. 【TCP_协议_socket接口】-jmeter

    1.ip 2.端口号 3.传入参数 4.告诉软件返回  最后以为是什么,不然就会报错 或者无限制的等待  查ascll 码表 启动接口的方法

  3. Ztree结合jbox实现弹窗树结构

    点击添加分类,弹出事项选择框为jbox <a href="#" id="down{{row.id}}" style="display:none& ...

  4. Scrum立会报告+燃尽图(Beta阶段第二周第五次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2413 项目地址:https://coding.net/u/wuyy694 ...

  5. 王者荣耀交流协会 - 第7次Scrum会议(第二周)

    1.例会照片 照片由王超(本人)拍摄,组内成员刘耀泽,高远博,王磊,王玉玲,王超,任思佳,袁玥全部到齐. 2.时间跨度: 2017年10月26日 17:05 — 17:47 ,总计42分钟. 3.地 ...

  6. SVN版本合并技巧

    公司使用了bug管理系统,项目添加新功能时,建一个主工单,再分成多个子工单,将子工单分给多个程序员来开发. 开发人员完成一部分就提交一部分,多个小功能模块就分多次提交到测试主干,然后用测试主干项目发布 ...

  7. 《剑指offer》---左旋转字符串与右旋转字符串

    本文算法使用python3实现 1. 问题1 1.1 题目描述:   汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S, ...

  8. EasyUI中DataGrid构建复合表头

    在使用easyui的DataGrid控件时,构建复合表头就显得非常简单了.只需要在使用columns属性时通过数组的方式编写列名即可.如我们需要构建成一个如下的表头: Columns的代码如下: co ...

  9. C语言添加宏开关

    原文地址:http://blog.csdn.net/cp1300/article/details/7773239 我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是 ...

  10. redis 入手

    redis是数据库,数据库肯定是处理处理数据.既然是处理数据,无非就是增删查改 redis用于操作键的命令基本上分为两大类 对任何键都可执行的: DEL 命令. EXPIRE 命令. RENAME 命 ...