将C++ IplImage 图像用C#读取
如何将C++ IplImage 图像用C#读取 ?
将opencv 的C++程序做成 dll 动态链接库 用C#调用
当然这里需要安装emgucv ,也可以自己实现这个类。
下面我把实现贴出来给大家参考:
1.制作dll
- #include "stdafx.h"
- #define DLL_API extern "C" _declspec(dllexport)
- #include <Windows.h>
- #include <stdio.h>
- #include <opencv2\opencv.hpp>
- #include <opencv\cxcore.h>
- #include <opencv2/legacy/compat.hpp>
- using namespace std;
- using namespace cv;
- DLL_API IplImage * _stdcall run1()
- {
- IplImage *src;
- src = cvLoadImage("d:/1.jpg");
- return src;
- }
2.C#中读取dll
需要开启 unsafe 模式
- [DllImport("dll_test_0410.dll")]
- unsafe
- public static extern MIplImage* run1();
调用函数并显示成图片:
需要将生成的dll 放入c#工程的bin里面对应的debug或者release
- unsafe
- MIplImage* a;
- unsafe
- private void button5_Click(object sender, EventArgs e)
- {
- IntPtr aa= new IntPtr();
- a= run1();
- int m= a->width;
- aa = a->imageData;
- int uu =a->height;
- int step = a->widthStep;
- Image<Bgr, byte> src = new Image<Bgr, byte>(m, uu, step, aa);//没有安装emgucv的话这个方法不能用,用intPtr转换
- pictureBox1.Image = src.ToBitmap();
- ///////////////方法二,但是MIplImage还需要定义速度也慢,下面为单通道图像,多通道类似写一下就行//////
- byte []uuu = new byte[width*height];
- Marshal.Copy(aa,uuu,0,width*height);
- Bitmap dst = new Bitmap(width, height);
- Color color= new Color();
- for(int j=0;j<height;j++)
- {for(int i=0;i<width;i++)
- {
- byte m = uuu[j*width+i];
- color = Color.FromArgb(m, m, m);
- dst.SetPixel(i, j, color);
- }
- }
- pictureBox1.Image = dst;
- }
将C++ IplImage 图像用C#读取的更多相关文章
- opencv图像像素值读取
说到图像像素,肯定要先认识一下图像中的坐标系长什么样. 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线:Y轴为图像矩形左边的那条垂直线.该坐标体系在诸如结构体Mat,Rect ...
- JPEG图像扩展信息读取和修改
最近,项目需要使用jpg图像信息被写入(非水印),经过研究发现,Android已封装的读者jpg图片扩展信息api(ExifInterface). 通讯api住址:http://developer.a ...
- opencv入门系列教学(二)图像入门:读取、展示并保存视频
一.从相机读取视频 通常情况下,我们必须用摄像机捕捉实时画面.让我们从摄像头捕捉一段视频(我使用的是我笔记本电脑内置的网络摄像头) ,将其转换成灰度视频并显示出来. 要捕获视频,我们需要 ...
- OpenCV中IplImage图像格式与BYTE图像数据的转换
最近在将Karlsruhe Institute of Technology的Andreas Geiger发表在ACCV2010上的Efficent Large-Scale Stereo Matchin ...
- SimpleITK学习(二)图像读取
通常我会用simpleitk来读取dicom文件,主要是为了将dicom文件转换为numpy矩阵,便于输入神经网络,读取dicom文件可分为两种情况,一.单独的dicom文件 二.一系列dicom文件 ...
- 图像读取Exif小知识,图像扶正,还原拍摄时的角度
在做人脸识别的时候发现很多手机拍摄的图像在C#读取之后方向出现了错误,Bitmap中的宽度和实际的windows的文件属性内的参数相反,引起一阵测试和思考,后来百度出来可以用Exif来解决 githu ...
- Halcon一日一练:读取文件目录图像的三种方法
第一种方法: 读了一个单一图像: read_image(Image,'fabrik') 这种方式可以快速的读取软件自身携带的库图像文件,系统设定了库图像映像文件的快速读取方式,我们也可以通过绝对地址的 ...
- matlab中imread 从图形文件读取图像
来源:https://ww2.mathworks.cn/help/matlab/ref/imread.html?searchHighlight=imread&s_tid=doc_srchtit ...
- IplImage, CvMat, Mat 的关系和相互转换(转)
(看到的一篇非常好的文章,讲opencv内部类之间的关系的.) opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重 ...
随机推荐
- LibreOJ#6030. 「雅礼集训 2017 Day1」矩阵
https://loj.ac/problem/6030 如果矩阵第i列有一个黑色, 那可以用他把第i行全都染黑,也可以使任意一列具有黑色 然后就可以用第i行把矩阵染黑 染黑一列的代价最少是1 染黑一行 ...
- 深入分析tcp close与shutdown
关闭socket-close 我们知道,tcp是一种支持全双工(full-duplex)通信的的协议,也就是说建立连接的两端可以在同一个时刻发送.接受数据.在需要关闭套接字的时候,我们一般调用: in ...
- 【转】一个简单的WCF回调实例
代码下载:http://files.cnblogs.com/AlwinXu/CallbackService-master.zip 本文转自: http://adamprescott.net/2012/ ...
- Spring IOC 容器
<bean name="userBean" class="com.nuts.demo.spring.UserBean"> <property ...
- 在springMVC中使用自定义注解来进行登录拦截控制
1:java注解使用是相当频繁,特别是在搭建一些框架时,用到类的反射获取方法和属性,用的尤其多. java中元注解有四个: @Retention @Target @Document ...
- 基于Django-Cookie的CBV和FBV的用户验证装饰器
FBV模式 def cookie(func): def deco(request,*args,**kwargs): u = request.get_signed_c ...
- springboot中报异常Whitelabel Error Page
开始以为是url写错了,但其实不是,然后启动application类在的包是要在最顶部,并且和pom中groupid一样 这个也没错,后来发现能访问RestController中的url,但是进不了方 ...
- 金蝶K3物料选择问题(感觉Ctrl被按住了一样)
金蝶K3在进入物料选择时,有时需要用Ctrl才可以进行多选,为什么有时不用Ctrl也可以进行多选,就像Ctrl被按住了一样? 解决:在物料选择界面按2次ctrl键单击物料可实现多选,再按2次ctrl则 ...
- pom可以过滤resource 下的文件
- 使用Cache缓存
存放位置:服务器内存,用于频繁访问且不轻易更改的内容缓存. string CacheKey = "CT1"; //检索指定项, object objModel = Cache.Ge ...