visual Studio Community 2015 工程和源代码:http://pan.baidu.com/s/1o6u5Fdw

内容

在这篇文章中将提到以下内容:

  • 从文件中读取图像
  • Image类
  • 显示图像
  • 保存图像

在上一篇文章Emgu学习之(一)——Emgu介绍中,我介绍了如何创建Emgu的工程,但是上一个Demo使用的是OpenCV的HighGUI窗体显示图像,这一

次我们要用WinForm窗体显示图像,并将图像进行操作后另存为新的图像文件。首先我们要做的是在Visual studio中新建一个ImageShowing的WinForm

窗体项目。再在工具箱中添加Emgu的控件,控件添加地址为Emgu安装目录下的..\bin\Emgu.CV.UI.dll,添加完成后如下图:

添加完Emgu的控件后,在Form1中添加Emgu下的ImageBox控件和Flip、SaveAs按键,布局如下:

在From1.cs文件中添加命名空间引用:

 using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using Emgu.Util;

为Flip按键添加控件事件代码:

         private void FlipButton_Click(object sender, EventArgs e)
{
if(imageBox1.Image != null)
{
var image = (Image<Bgr, Byte>)imageBox1.Image;
image._Flip(FlipType.Horizontal);//翻转图像
imageBox1.Image = image;
}
}

从文件中读取图像并显示

为Form1添加Load事件代码如下:

         private void Form1_Load(object sender, EventArgs e)
{
Image<Bgr, Byte> image = new Image<Bgr, byte>(@"D:\src.jpg");//从文件加载图片
imageBox1.Image = image;//显示图片
}

以上代码,我们新建一个Image类的对象,我们指定了这个对象的色彩空间为BGR(OpenCV使用BGR而不是RBG),值深度为Byte。然后将这个对象赋值给

imageBox.Image属性。运行以上代码,效果如图:

Image类

OpenCV中使用IplImage数据结构描述图像数据,Emgu则将图像数据封装为一个托管类:Image<TColor, TDepth>,这个类包含两个泛型参数:TColor和

TDepth,也就是说当你要定义一个Image对象时,你需要指定色彩空间类型和数据深度。为了创建一个8bit 无符号整型灰度图像,在Emgu中需要像如下代码:

Image<Gray, Byte> image = new Image<Gray, Byte>(width, height);

其中Gray为图像的色彩控件,Emgu支持的色彩类型有:

  • Gray
  • Bgr (Blue Green Red)
  • Bgra (Blue Green Red Alpha)
  • Hsv (Hue Saturation Value)
  • Hls (Hue Lightness Saturation)
  • Lab (CIE L*a*b*)
  • Luv (CIE L*u*v*)
  • Xyz (CIE XYZ.Rec 709 with D65 white point)
  • Ycc (YCrCb JPEG)

Byte为图像的值深度,Emgu支持的值深度类型有:

  • Byte
  • SByte
  • Single (float)
  • Double
  • UInt16
  • Int16
  • Int32 (int)

尽管可以使用CVInvoke.cvCreateImage创建图像对象,但是仍然建议你使用Image<TColor, TDepth>类创建对象。使用Image<TColor, TDepth>这个托

管类,垃圾回收器会在对象没用时自动释放对象的内存空间,并且Image<TColor, TDepth>以类的方式提供了一些更方便的方法(这些方法OpenCV本身并未

提供)。

Image<TColor, TDepth>类继承了IDisposable接口,也就说你可以使用using关键字使image对象在使用完后可以被及时地释放。因为垃圾回收是在不确定的

时刻发生的,所以建议你显示使用Dispose方法或using关键字来限定image的作用域。

using (Image<Gray, Single> image = new Image<Gray, Single>(, ))
{
... //使用image对象
} //image对象的Dispose方法会自动被调用,内存会被释放

对image的更多介绍会在后续的文章中一一介绍,更多内容请查看Emgu官方页面:http://www.emgu.com/wiki/index.php/Working_with_Images

保存图像

为SaveAs按键添加控件事件代码:

         private void SaveAsButton_Click(object sender, EventArgs e)
{
if(imageBox1.Image != null)
{
imageBox1.Image.Save(@"D:\tmp.jpg");//保存图片
}
}

你可以点击Flip按键,然后保存图片,保存后的图片是翻转了图片:

Emgu学习之(二)——图像读取、显示、保存的更多相关文章

  1. openCV学习——一、图像读取、显示、输出

    openCV学习——一.图像读取.显示.输出   一.Mat imread(const string& filename,int flags=1),用于读取图片 1.参数介绍 filename ...

  2. libTIFF 图像读取与保存

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/YhL_Leo/article/details/49848391 1 头文件 libtif ...

  3. 2018百度之星开发者大赛-paddlepaddle学习(二)将数据保存为recordio文件并读取

    paddlepaddle将数据保存为recordio文件并读取 因为有时候一次性将数据加载到内存中有可能太大,所以我们可以选择将数据转换成标准格式recordio文件并读取供我们的网络利用,接下来记录 ...

  4. 实战深度学习OpenCV(二):读取并播放本地或者摄像头的视频

    一.读取并播放的代码如下: #include "pch.h" #include <iostream> #include <opencv2/core/core.hp ...

  5. jquery 学习笔记二 隐藏与显示

    css找到元素后是添加样式,而jquery找到元素后是添加形为. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...

  6. vscode学习(二)之显示中文异常解决办法

    异常原因:VSCODE默认是UTF-8编码打开文件的.如果遇到了像GB18030 GBK等等的编码,就显示乱码了. 解决办法: 在设置文件中加入:"files.autoGuessEncodi ...

  7. Opencv 图像读取与保存问题

    转自 @yhl_leo 1 图像读取 首先看一下,imread函数的声明: // C++: Mat based Mat imread( ); // C: IplImage based IplImage ...

  8. opencv-python教程学习系列2-读取/显示/保存图像

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的读取.显示以及保存,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: ...

  9. [OpenCV学习笔记3][图像的加载+修改+显示+保存]

    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...

随机推荐

  1. 设置linux账号的有效时间

    在linux系统中,默认创建的用户的有效期限都是永久的,但有时候,我们需要对某些用户的有效期限做个限定!比如:公司给客户开的ftp账号,用于客户下载新闻稿件的.这个账号是有时间限制的,因为是付费的.合 ...

  2. 一个简单的scrapy爬虫抓取豆瓣刘亦菲的图片地址

    一.第一步是创建一个scrapy项目 sh-3.2# scrapy startproject liuyifeiImage sh-3.2# chmod -R 777 liuyifeiImage/ 二.分 ...

  3. Redis做消息队列文章两篇

    介绍:http://www.cnblogs.com/lhfcws/p/3732535.html 具体做法:http://shift-alt-ctrl.iteye.com/blog/1867454 另外 ...

  4. 解决网站在负载均衡环境下SESSION丢失的问题

    在WEB场中,动态网页往往会因为几台主机做了负载而产生SESSION丢失的问题,网上也有很多的介绍,我这里只将我经历的过程给大家分享一下:   系统要运行在负载平衡的 Web 场环境中,而系统配置文件 ...

  5. 联想Y50p预装win8系统改为win7

    &1 修改OS Optimized Defaults 开机,按[F2]进入BIOS设置,按右方向键选择到EXIT上面,按下方向键选择OS Optimized Defaults,回车,将Win8 ...

  6. 面试准备(二) 绘制 Activity 的生命流程图

    我们来看一下这一张经典的生命周期流程图: 相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCr ...

  7. 基于CoreText的基础排版引擎

    storyboard: 新建一个CTDisplayView:UIView 代码如下: #import "CTDisplayView.h" #import "CoreTex ...

  8. 使用Let’s Encrypt轻松配置https站点

    使用Let's Encrypt轻松配置https站点 https不仅能提高网站安全,更是被搜索引擎纳入排名的因素之一. 2015年10月份,微博上偶然看到Let's Encrypt 推出了beta版, ...

  9. 解决BeanNotOfRequiredTypeException: Bean named 'XXX' must be of type XXX, but was actually of type XXX问题

    Java新手,困扰了一下午. 发布时总是报这样一个错误. org.springframework.beans.factory.BeanCreationException: Error creating ...

  10. Servlet响应的中文字符集问题

    在Servlet中利用response向客户端浏览器输出中文时有时会遇到乱码问题,总结如下: response输出流有两种,一是以字节流输出,一是以字符流输出. 一.以字节流输出: 1.默认编码输出木 ...