将C++ IplImage 图像用C#读取

如何将C++ IplImage 图像用C#读取  ?

将opencv 的C++程序做成 dll 动态链接库 用C#调用

当然这里需要安装emgucv  ,也可以自己实现这个类。

下面我把实现贴出来给大家参考:

1.制作dll

  1. #include "stdafx.h"
  2. #define DLL_API extern "C" _declspec(dllexport)
  3. #include <Windows.h>
  4. #include <stdio.h>
  5. #include <opencv2\opencv.hpp>
  6. #include <opencv\cxcore.h>
  7. #include <opencv2/legacy/compat.hpp>
  8. using namespace std;
  9. using namespace cv;
  10. DLL_API IplImage * _stdcall run1()
  11. {
  12. IplImage *src;
  13. src = cvLoadImage("d:/1.jpg");
  14. return src;
  15. }

2.C#中读取dll

需要开启 unsafe 模式

  1. [DllImport("dll_test_0410.dll")]
  2. unsafe
  3. public static extern MIplImage* run1();

调用函数并显示成图片:

需要将生成的dll 放入c#工程的bin里面对应的debug或者release

  1. unsafe
  2. MIplImage* a;
  3. unsafe
  4. private void button5_Click(object sender, EventArgs e)
  5. {
  6. IntPtr aa= new IntPtr();
  7. a= run1();
  8. int m= a->width;
  9. aa = a->imageData;
  10. int uu =a->height;
  11. int step = a->widthStep;
  12. Image<Bgr, byte> src = new Image<Bgr, byte>(m, uu, step, aa);//没有安装emgucv的话这个方法不能用,用intPtr转换
  13. pictureBox1.Image =  src.ToBitmap();
  14. ///////////////方法二,但是MIplImage还需要定义速度也慢,下面为单通道图像,多通道类似写一下就行//////
  15. byte []uuu = new byte[width*height];
  16. Marshal.Copy(aa,uuu,0,width*height);
  17. Bitmap dst = new Bitmap(width, height);
  18. Color color= new Color();
  19. for(int j=0;j<height;j++)
  20. {for(int i=0;i<width;i++)
  21. {
  22. byte m = uuu[j*width+i];
  23. color = Color.FromArgb(m, m, m);
  24. dst.SetPixel(i, j, color);
  25. }
  26. }
  27. pictureBox1.Image = dst;
  28. }
时间: 2024-10-07 11:04:59

将C++ IplImage 图像用C#读取的相关文章

【Open CV基础】IplImage图像数据

名词解释: 像素:像素是指基本原色素及其灰度的基本编码.[1] 像素是构成数码影像的基本单元,通常以像素每英寸PPI(pixels per inch)为单位来表示影像分辨率的大小. 像素位深度:每个像素所用的位数(bit),像素位深度决定了彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数. IplImage各项结构属性说明:(源代码在opencv2/core/types_c.h的465行左右,里面有关各属性的说明) #include "cv.h" #incl

opencv图像像素值读取

说到图像像素,肯定要先认识一下图像中的坐标系长什么样. 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线:Y轴为图像矩形左边的那条垂直线.该坐标体系在诸如结构体Mat,Rect,Point中都是适用的.(OpenCV中有些数据结构的坐标原点是在图片的左下角,可以设置的). 2. 在使用image.at<TP>(x1, x2)来访问图像中点的值的时候,x1并不是图片中对应点的x轴坐标,而是图片中对应点的y坐标(也就是编程中的pic.rows那行).x2同理. 3. 如果所

OpenCV中IplImage图像格式与BYTE图像数据的转换

最近在将Karlsruhe Institute of Technology的Andreas Geiger发表在ACCV2010上的Efficent Large-Scale Stereo Matching代码仿真.Andreas提供的源码中没有使用opencv,导致我一时无法适应如何显示处理的中间结果.将对应的库加载后,仿照采集相机图像数据的方式,从内存中读取对应图像到IplImage类型指针指定的内存空间,方便代码的调试和效果观测.其中用到的部分资料如下. *******************

图像处理之opencv---mat、cvmat、IplImage之间的转换

一.Mat类型:矩阵类型,Matrix.  在openCV中,Mat是一个多维的密集数据数组.可以用来处理向量和矩阵.图像.直方图等等常见的多维数据. Mat有3个重要的方法: 1.Mat mat = imread(const String* filename); 读取图像 2.imshow(const string frameName, InputArray mat); 显示图像 3.imwrite (const string& filename, InputArray img); 储存图像

opencv 数据类型转换:CvArr, Mat, CvMat, IplImage, BYTE 转

留着以后查询: http://blog.csdn.net/augusdi/article/details/8863820 一.Mat类型:矩阵类型,Matrix. 在openCV中,Mat是一个多维的密集数据数组.可以用来处理向量和矩阵.图像.直方图等等常见的多维数据. Mat有3个重要的方法: 1.Mat mat = imread(const String* filename); 读取图像 2.imshow(const string frameName, InputArray mat); 显示

opencv2 矩阵方式 resize图像缩放代码(转载)

http://blog.sina.com.cn/s/blog_74a459380101r0yx.html opencv2 矩阵方式 resize图像缩放代码(转载) (2014-05-16 09:55:35) 转载▼   分类: Opencv_Function 最近学习opencv的时候遇到的一些技术问题,拿出来分享一下.opencv1和opencv2最大的区别就是c++支持,这使得网上有些资料是opencv1的c语言写的,而有些人喜欢c++,当然接口函数也就不同了.下面是一个c++的openc

CvArr、Mat、CvMat、IplImage、BYTE转换

一.Mat类型:矩阵类型,Matrix. 在openCV中,Mat是一个多维的密集数据数组.可以用来处理向量和矩阵.图像.直方图等等常见的多维数据. Mat有3个重要的方法: 1.Mat mat = imread(const String* filename);            读取图像 2.imshow(const string frameName, InputArray mat);      显示图像 3.imwrite (const string& filename, InputAr

opencv基础知识------IplImage, CvMat, Mat 的关系和相互转换

Mat,cvMat和IplImage这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化.而CvMat和IplImage类型更侧重于“图像”,opencv对其中的图像操作(缩放.单通道提取.图像阈值操作等)进行了优化.在opencv2.0之前,opencv是完全用C实现的,但是,IplImage类型与CvMat类型的关系类似于面向对象中的继承关系.实际上,CvMat之上还有一个更抽象的基类----CvArr,这在源代码中会常见. 一.

IplImage, CvMat, Mat 的关系和相互转换(转)

(看到的一篇非常好的文章,讲opencv内部类之间的关系的.) opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化.而CvMat和IplImage类型更侧重于“图像”,opencv对其中的图像操作(缩放.单通道提取.图像阈值操作等)进行了优化.在opencv2.0之前,opencv是完全用C实现的,但是,IplImage类型与CvMat类型的关系类似