问题描述:

用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相关推荐

  1. opencv mat用数组初始化_10、OpenCV中图像和Mat类型(一)

    Mat类型可以被认为是OpenCV库的核心. OpenCV库中绝大多数的函数都是Mat类的成员,以Mat作为参数,或者Mat作为返回值. Mat类用于表示任意维数的密集数组.即使对于数组中的该条目为零 ...

  2. OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式...

    OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式 以最简单的4 x 5三通道图像为例,其在内存中Mat类型的数据组织形式如下: 每一行的每一列 ...

  3. Mat的初始化以及Mat与数组的相互转化

    Mat类型数据的初始化方法可以有以下两种: 1.直接初始化 Mat_<float> T_L = (Mat_<float>(3, 1) << -518.97666, ...

  4. js 如何将java list集合转换成var类型数组_零基础参加郑州Java培训 一定要注意Arrays.asList的用法...

    作为编程界的老大哥,Java一直是想要加入互联网行业的人的首选.为了能够更快更好地入行,很多零基础学员选择参加郑州Java培训班,跟着老师的脚步由浅入深的学习专业技术.今天千锋郑州小编就给大家分享使用 ...

  5. java mat类型_JVM MAT使用分析详解

    MAT简介 MAT是一款非常强大的内存分析工具,在Eclipse中有相应的插件,同时也有单独的安装包.在进行内存分析时,只要获得了反映当前设备内存映像的hprof文件,通过MAT打开就可以直观地看到当 ...

  6. 利用指针访问opencv Mat类型的矩阵,以及求椭圆方程的函数

    1. 能利用数组初始化Mat类型矩阵吗? 2.为什么要用数组初始化Mat矩阵,以及什么情况下使用,使用数组初始化Mat矩阵的条件是什么? 3.怎么利用指针访问Mat矩阵,是怎么进行的? 答:是为了使用 ...

  7. C# Bitmap转Mat类型

    /// <summary>/// bitmap 位图转为mat类型 /// </summary>/// <param name="bitmap"> ...

  8. opencv的mat赋值_OpenCV Mat 类型定义和赋值

    1.一般的Mat定义方法:cv::Mat M(height,width,),例: cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵,矩阵的每个单元的由三个( ...

  9. Java中char类型数组打印数组名输出结果不是地址值

    Java中其他类型数组打印数组名,输出结果都是内存地址 Java中char类型数组打印数组名,输出结果不是内存地址 char类型的数组就相当于一个字符串. 因为输出流System.out是PrintS ...

最新文章

  1. Hadoop配置环境变量
  2. 打通新场景,源创计划第一弹!“悟道”大模型应用合作交流会
  3. datetime处理日期和时间
  4. 解决J2EE系统应用性能问题常用方法
  5. gen_circle_contour_xld创建圆或圆弧的XLD轮廓
  6. 影响程序员生涯的三个错误观念,你千万不要犯
  7. 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景
  8. Python的apidoc操作
  9. 升级总代分享思路_旧笔记本光驱换SSD,升级内存,改造散热还能再战5年
  10. 到底如何保证线程安全,总结得太好了!
  11. 开课吧9.9学python课_python 自动化运维 零基础入门 课程
  12. PKM全民推广系列一:PKM定义
  13. CSS进阶(15)—— CSS世界的层叠规则(上)
  14. windows7修改或删除曾经保存的远程桌面连接的密码
  15. sp3485调试:sp3485-TTL转max485模块-TTL转usb模块电脑pc
  16. 南卡和声阔蓝牙耳机哪个比较好用?降噪效果好的蓝牙耳机推荐
  17. 一根网线实现双机互联共享文件
  18. rk3328或树莓派开发板系统镜像备份制作剪裁
  19. 会员管理小程序实战开发教程(六)-会员查询功能
  20. Phalanx HDU 【2859】

热门文章

  1. Matlab函数学习---sum函数(计算矩阵、数组和向量元素总和)
  2. 【Swift】监听耳机插入拔出的通知
  3. MySQL-备份恢复
  4. 基于XGBoost 的机器学习可解释性
  5. JVM G1GC参数配置
  6. CMU 15-445/645-Note11-Distributed Databases
  7. Java BIO的基本介绍
  8. centos7 下mono安装
  9. 《大数据架构和算法实现之路:电商系统的技术实战》——2.4 案例实践
  10. 无法启动此程序,因为计算机中丢失vcruntime140.dll”的解决方法