OpencvSharp的Mat类型数组传入c++的DLL
问题描述:
用OpencvSharp创建的Mat类型数组应该怎么传入用c++写好的DLL中呢,Opencv和Opencv#都有Mat类型,然而他们并不能够互传。其实需要在c#中将Mat数组lock在内存中,再以指针的形式传入c++,c++接收的是一个图像数组指针。我做了一个简单的例子来表明这些操作,具体见代码。
解决方案:
c++部分:
#include<iostream>
#include<opencv.hpp>
#include<cmath>using namespace std;
using namespace cv;void xianshi(unsigned char* ImageBuffer, int imageWedth, int imageHeight)
{Mat compMat = cv::Mat(imageHeight, imageWedth, CV_8UC3, ImageBuffer);cv::imshow("显示", compMat);
}
c#部分:
[DllImport("E:\\project\\xianshiDLL\\x64\\Release\\xianshiDLL.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]public extern static void xianshi(byte[] ImageBuffer, int imageWedth, int imageHeight);private void button5_Click(object sender, EventArgs e){string testpath = "E:/project/1.jpg";Mat img = new Mat(testpath);Bitmap bmp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(img);System.Drawing.Imaging.BitmapData bmpdata = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);IntPtr ptr = bmpdata.Scan0;int bytes = bmp.Width * bmp.Height * 3;byte[] rgbvalues = new byte[bytes];Marshal.Copy(ptr, rgbvalues, 0, bytes);xianshi(rgbvalues, bmp.Width, bmp.Height);}
c#调用c++DLL后的结果:
没毛病!!
OpencvSharp的Mat类型数组传入c++的DLL相关推荐
- opencv mat用数组初始化_10、OpenCV中图像和Mat类型(一)
Mat类型可以被认为是OpenCV库的核心. OpenCV库中绝大多数的函数都是Mat类的成员,以Mat作为参数,或者Mat作为返回值. Mat类用于表示任意维数的密集数组.即使对于数组中的该条目为零 ...
- OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式...
OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式 以最简单的4 x 5三通道图像为例,其在内存中Mat类型的数据组织形式如下: 每一行的每一列 ...
- Mat的初始化以及Mat与数组的相互转化
Mat类型数据的初始化方法可以有以下两种: 1.直接初始化 Mat_<float> T_L = (Mat_<float>(3, 1) << -518.97666, ...
- js 如何将java list集合转换成var类型数组_零基础参加郑州Java培训 一定要注意Arrays.asList的用法...
作为编程界的老大哥,Java一直是想要加入互联网行业的人的首选.为了能够更快更好地入行,很多零基础学员选择参加郑州Java培训班,跟着老师的脚步由浅入深的学习专业技术.今天千锋郑州小编就给大家分享使用 ...
- java mat类型_JVM MAT使用分析详解
MAT简介 MAT是一款非常强大的内存分析工具,在Eclipse中有相应的插件,同时也有单独的安装包.在进行内存分析时,只要获得了反映当前设备内存映像的hprof文件,通过MAT打开就可以直观地看到当 ...
- 利用指针访问opencv Mat类型的矩阵,以及求椭圆方程的函数
1. 能利用数组初始化Mat类型矩阵吗? 2.为什么要用数组初始化Mat矩阵,以及什么情况下使用,使用数组初始化Mat矩阵的条件是什么? 3.怎么利用指针访问Mat矩阵,是怎么进行的? 答:是为了使用 ...
- C# Bitmap转Mat类型
/// <summary>/// bitmap 位图转为mat类型 /// </summary>/// <param name="bitmap"> ...
- opencv的mat赋值_OpenCV Mat 类型定义和赋值
1.一般的Mat定义方法:cv::Mat M(height,width,),例: cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵,矩阵的每个单元的由三个( ...
- Java中char类型数组打印数组名输出结果不是地址值
Java中其他类型数组打印数组名,输出结果都是内存地址 Java中char类型数组打印数组名,输出结果不是内存地址 char类型的数组就相当于一个字符串. 因为输出流System.out是PrintS ...
最新文章
- Hadoop配置环境变量
- 打通新场景,源创计划第一弹!“悟道”大模型应用合作交流会
- datetime处理日期和时间
- 解决J2EE系统应用性能问题常用方法
- gen_circle_contour_xld创建圆或圆弧的XLD轮廓
- 影响程序员生涯的三个错误观念,你千万不要犯
- 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景
- Python的apidoc操作
- 升级总代分享思路_旧笔记本光驱换SSD,升级内存,改造散热还能再战5年
- 到底如何保证线程安全,总结得太好了!
- 开课吧9.9学python课_python 自动化运维 零基础入门 课程
- PKM全民推广系列一:PKM定义
- CSS进阶(15)—— CSS世界的层叠规则(上)
- windows7修改或删除曾经保存的远程桌面连接的密码
- sp3485调试:sp3485-TTL转max485模块-TTL转usb模块电脑pc
- 南卡和声阔蓝牙耳机哪个比较好用?降噪效果好的蓝牙耳机推荐
- 一根网线实现双机互联共享文件
- rk3328或树莓派开发板系统镜像备份制作剪裁
- 会员管理小程序实战开发教程(六)-会员查询功能
- Phalanx HDU 【2859】