http://blog.csdn.net/marvinhong/article/details/6800450

图像显示在控件loadPictureBox上

方法一

//读取图像001.jpg

IntPtr img = CvInvoke.cvLoadImage("001.jpg", Emgu.CV.CvEnum.LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_COLOR);

//IntPtr转换为Image,详细见IntPtr2Image方法

loadPictureBox.Image = IntPtr2Image(img);

//显示图像窗口

CvInvoke.cvShowImage("view", img);

//窗口保留2000毫秒,即2秒
CvInvoke.cvWaitKey(2000);

//关闭窗口
CvInvoke.cvDestroyWindow("view");

//保存图像
CvInvoke.cvSaveImage("002.jpg", img);

//释放
CvInvoke.cvReleaseImage(ref img);

  1. private Image IntPtr2Image(IntPtr src)
  2. {
  3. MIplImage img = (MIplImage)Marshal.PtrToStructure(src, typeof(MIplImage));
  4. Bitmap disp = new Bitmap(img.width, img.height, PixelFormat.Format24bppRgb);
  5. BitmapData bmp = disp.LockBits(new Rectangle(0, 0, img.width, img.height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
  6. long linebytes = (img.width * 24 + 31) / 32 * 4;
  7. unsafe
  8. {
  9. byte* pixel = (byte*)bmp.Scan0.ToPointer();
  10. if (img.nChannels == 3)
  11. {
  12. for (int i = 0; i < img.height; i++)
  13. {
  14. for (int j = 0, n = 0; j < img.width; j++, n++)
  15. {
  16. byte b = ((byte*)img.imageData + img.widthStep * i)[3 * j];
  17. byte g = ((byte*)img.imageData + img.widthStep * i)[3 * j + 1];
  18. byte r = ((byte*)img.imageData + img.widthStep * i)[3 * j + 2];
  19. *(pixel + linebytes * (i) + n) = b;
  20. n++;
  21. *(pixel + linebytes * (i) + n) = g;
  22. n++;
  23. *(pixel + linebytes * (i) + n) = r;
  24. }
  25. }
  26. }
  27. else if (img.nChannels == 1)
  28. {
  29. for (int i = 0; i < img.height; i++)
  30. {
  31. for (int j = 0, n = 0; j < img.width; j++, n++)
  32. {
  33. byte g = ((byte*)img.imageData + img.widthStep * i)[j];
  34. *(pixel + linebytes * (i) + n) = g;
  35. n++;
  36. *(pixel + linebytes * (i) + n) = g;
  37. n++;
  38. *(pixel + linebytes * (i) + n) = g;
  39. }
  40. }
  41. }
  42. else
  43. {
  44. return null;
  45. }
  46. }
  47. disp.UnlockBits(bmp);
  48. return (Image)disp;
  49. }

方法二

Image<Bgr, Byte> img = new Image<Bgr, byte>("001.jpg");

loadPictureBox.Image = img.ToBitmap();

C# Emgu CV学习笔记二之图像读写的两种方法的更多相关文章

  1. MySQL学习笔记(2) - 修改MySQL提示符的两种方法

    学习于慕课网 http://www.imooc.com/video/1806 1.方法一: cmd中处于未登录状态时,输入 mysql -uroot -p自己的密码 --prompt 新的提示符 示例 ...

  2. TQ2440学习笔记——Linux上I2C驱动的两种实现方法(1)

    作者:彭东林 邮箱:pengdonglin137@163.com 内核版本:Linux-3.14 u-boot版本:U-Boot 2015.04 硬件:TQ2440 (NorFlash:2M   Na ...

  3. PMP知识点(二)——三点估算的两种方法对活动持续时间估算的影响和如何取舍

    一.准备工作 活动持续时间的估算属于PMBOK中第六章项目时间管理中第五节6.6估算活动持续时间的内容. 三点估算是6.5和7.2(估算成本)中应用到的一种工具和技术.数据流向图参考如下: 其应用到的 ...

  4. java web学习总结(二十九) -------------------JavaBean的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  5. Emgu cv 学习笔记

    http://www.cnblogs.com/CoverCat/p/5003363.html emgu中imagebox与picturebox imagebox 是emgu   设置好厚,新出现的控件 ...

  6. Android(java)学习笔记147:textView 添加超链接(两种实现方式,,区别于WebView)

    1.方式1: LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams params = new LinearLa ...

  7. PHP学习笔记,curl,file_get_content,include和fopen四种方法获取远程文件速度测试.

    这几天在做抓取.发现用PHP的file_get_contents函数来获取远程文件的过程中总是出现失败,并且效率很低下.所以就做了个测试的demo来测试下PHP中各种方法获取文件的速度. 程序里面使用 ...

  8. react学习笔记1之声明组件的两种方式

    //定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class ...

  9. angular学习笔记(三)-视图绑定数据的两种方式

    绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...

随机推荐

  1. 人脸辨识,用树莓派Raspberry Pi实现舵机云台追踪脸孔

    影像辨识作为近年最热门的专业技术之一,广泛用于智慧监视器.车电监控.智慧工厂.生物医疗电子等等:其中,人脸辨识是一个很重要的部分,网络上已经有相当多的资源可供下载使用:于是我们使用舵机云台作为镜头旋转 ...

  2. 240. 搜索二维矩阵 II

    二维数组搜索 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ...

  3. Throwable、Error、Exception、RuntimeException的区别与联系

    Throwable类是Java语言中所有错误和异常的超类.只有作为此类(或其子类之一)的实例的对象才被Java虚拟机抛出,或者可以被Java throw语句抛出.类似地,只有这个类或其子类之一可以是c ...

  4. mtv网站架构模式适合企业网站应用吗?

    mtv网站架构模式适合企业网站应用吗?有时候在思考这样一个问题. 从开发角度来说,本来mvc的进度慢了些,如果在数据库管理方面用sql的话,管理起来也不很方便.小企业网本来数据就不很多,也没什么太多安 ...

  5. Qt中容器类应该如何存储对象

    Qt提供了丰富的容器类型,如:QList.QVector.QMap等等.详细的使用方法可以参考官方文档,网上也有很多示例文章,不过大部分文章的举例都是使用基础类型:如int.QString等.如果我们 ...

  6. Python学习小目录汇总

    python其他知识目录 python基础知识-1 1.typora软件使用 2.python解释器安装 3.Python解释器环境变量添加 4.计算机编码知识: 5.输出print(): 6.变量 ...

  7. ORA-28000: the account is locked 查哪个具体ip地址造成

    查系统默认的策略,连续验证10次错误帐户即会被锁 SQL> select resource_name, limit from dba_profiles where profile='DEFAUL ...

  8. selenium--判断元素是否存在

    # coding:utf-8from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitf ...

  9. sprint3最终演示及团队贡献分

    团队名:在考虑 团队项目:复利计算 项目演示: 之前的功能都有演示过就不再一一截图,把我们新增加的功能说一下 首先用户进入我们的网页可以登录或者注册,注册的用户可以直接输入用户名及密码登录,没有注册的 ...

  10. Spark Transformations介绍

    背景 本文介绍是基于Spark 1.3源码 如何创建RDD? RDD可以从普通数组创建出来,也可以从文件系统或者HDFS中的文件创建出来. 举例:从普通数组创建RDD,里面包含了1到9这9个数字,它们 ...