1.******************************

C#调用vc++ dll 传递参数的问题(Bitmap 转换为 opencv mat ),保存后图片不一样。

vc++ 代码

bool Recognize(Point_2F *arr,uchar* b)
{Mat src=cv::Mat(415,770,CV_8UC3,b);/*for (int i=0;i<src.rows;i++)
{
memcpy(src.ptr(i),b+i*src.cols,src.cols);
}*/
cv::imwrite("D:\\my_2_testfiles\\111_before.png",src);// 保存的照片和原来的照片不一样而且大小也不一样?}

C#代码

 [DllImport("rectanglepoints.dll", EntryPoint = "Recognize", CallingConvention = CallingConvention.Cdecl)]static extern byte Recognize(IntPtr arr, IntPtr b);

{ // Create a new bitmap.Bitmap bmp = new Bitmap("D:\\my_2_testfiles\\111.png");// Lock the bitmap's bits.  Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);System.Drawing.Imaging.BitmapData bmpData =bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,bmp.PixelFormat);// Get the address of the first line.IntPtr ptrImg = bmpData.Scan0;
bool ret;ret = Convert.ToBoolean(Recognize(IntPtr.Zero, ptrImg));   // Unlock the bits.bmp.UnlockBits(bmpData);Console.Read();} 

照片附加

原图:

调用vc++ dll后保存的图片

2.******************************************************************

C#Bitmap和C++ opencv Mat相互转换  C#调用C++编译成的dll,这个dll中包含Opencv个的Mat到c#的Bitmap转换,具体代码如下:  C++部分:  首先创建win32应用程序,选择类库模板    DLL_APIuchar * _stdcall run1(char* filename, int&width, int&height, int&step) {   IplImage* uu = cvLoadImage(filename);   IplImage * dst1 = cvCreateImage(cvSize(uu->width, uu->height), 8, 1); cvCvtColor(uu, dst1, CV_RGB2GRAY); Matss = cvarrToMat(uu);   uchar * data = new uchar[uu->width*uu->height * 3]; data = ss.data;   width = ss.size().width; height = ss.size().height; step = ss.step;  return data; }  C#中调用这个dll  [DllImport(@"E:\Files\BarcodeProject\Code\testCode\OpenCvAssemblies\Debug\OpenCvAssemblies.dll" )]  publicstaticexternIntPtr run1(string a, outint width, outint height, outint step);  至此完成C++ Mat到Bitmap的转换  下面是Bitmap 到 Mat的转换 C# 部分  publicstaticBitmapInfoGetImagePixel(Bitmap Source) { byte[] result; int step;  intiWidth = Source.Width; intiHeight = Source.Height;  Rectanglerect = newRectangle(0, 0, iWidth, iHeight);  System.Drawing.Imaging.BitmapDatabmpData = Source.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, Source.PixelFormat); IntPtriPtr = bmpData.Scan0;  intiBytes = iWidth * iHeight * 3; //根据通道数进行设置 byte[] PixelValues = newbyte[iBytes];    //int time = Environment.TickCount;  System.Runtime.InteropServices.Marshal .Copy(iPtr, PixelValues, 0, iBytes); //time = Environment.TickCount - time; //Console.WriteLine(time.ToString() + "ms"); Source.UnlockBits(bmpData); step = bmpData.Stride; result = PixelValues; // return result; // step = 0;  BitmapInfo bi = newBitmapInfo{ Result=result, Step=step }; return bi; } }  ///<summary> /// Bitmap信息类 ///</summary>  publicclassBitmapInfo {  publicbyte[] Result { get;  set; } publicint Step { get; set; }  }  Step 是扫描的步长,这个很重要,如果这个步长不是原来的值,就会造成图像偏移,从而造成失真。    C++部分  DLL_APIvoid_stdcallshow(uchar* data,intwidth,intheight,intstep) { Matimage(height,width, CV_8UC3,data,step); //image.data = data; imshow("Image",image);    //Mat(int rows, int cols, int type, void* data, size_t step = AUTO_STEP); }  C# 中调用方式  BitmapInfo bi = GetImagePixel(bitmap);  show(bi.Result,bitmap.Width,bitmap.Height,bi.Step);  至此完成他们的相互转换

c#和c++的opencv位图数据参数互换问题解决方法相关推荐

  1. 存储过程IN参数疑难问题解决方法【真正解决】

    首先,我不会令大家失望,真想解决问题的认真往下看 很久很久以前,我在使用Server的存储过程时,遇到一个问题,就是,IN(@ids)这样的语句执行不了,其实是可以执行的,很多人提出的解决方案是,EX ...

  2. 使用OWC 做图表时按周、月、年设置时间刻度是参数无效问题解决方法

    设置如下时间刻度: ChartAxisGroupingEnum.chAxisGroupingManual;  ChartAxisUnitTypeEnum.chAxisUnitMonth; 需要在Set ...

  3. ECshop导入淘宝数据包乱码问题解决方法

    ECshop在导入淘宝数据包的时候出现数据乱码. 测试版本 ecshop2.73 利用淘宝助手导出一个数据包(.csv),不要一次全部商品导出,最好是将数据包控制在1M左右,因为ecshop对上传文件 ...

  4. 关于pycharm+opencv没有代码提示的问题解决方法记录

    代码可以看出实际我们引入的应该是cv2.cv2下面. 所以我们代码只需要import cv2.cv2 as cv 即可. 记着要重新启动下pycharm哦. 可以参考: https://blog.cs ...

  5. [ OpenCV ] QT配置OpenCV在mingw32-make时出现问题解决方法

    编译过程控制台出现以下错误: mingw32-make[2]: *** [modules\core\CMakeFiles\pch_Generate_opencv_core.dir\build .mak ...

  6. Vue2前端请求API数据跨域问题解决

    Vue2前端请求API数据跨域问题解决方法 前端:Vue2 接口使用:API 问题报错提示: Access to XMLHttpRequest at 'http://localhost:9090/ec ...

  7. mysql导出数据到表格讲解大全(导出数据带表头,导出数据中文乱码问题解决)

    方法1 使用sqlyang工具 1.本地准备好一个文件 2.选择数据 3.点击图中所示按钮 ,选择复制所有行到剪贴板 4.一般都选择确定,无须修改 5 打开之前的文件,粘贴保存 方法2 使用mysql ...

  8. OpenCV—矩阵数据类型转换cv::convertTo

    OpenCV-矩阵数据类型转换cv::convertTo 函数 [cpp] view plaincopy void convertTo( OutputArray m, int rtype, doubl ...

  9. 8位bmp 原始裸格式数据,需要加上文件头+位图信息头+调色板+位图数据 才是bmp图像

    byte[ ]进行处理,添加bmp的文件头+位图信息头+调色板+位图数据.保存8位bmp,如果是调色板有问题,位图 会是纯白,纯黑等,无法显示正常图像.好了,代码奉上. package com.idf ...

最新文章

  1. c保留小数点后三位数没有则为0_哪位老师整理的,这么齐全?赶紧存下为孩子期末考试助力...
  2. 初识react中高阶组件
  3. Web前端开发笔记——第二章 HTML语言 第十节 画布标签、音视频标签
  4. 增强型的for循环linkedlist_LinkedList的复习
  5. java计算时间差距_硬计算和软计算之间的差异
  6. 机器学习经典算法决策树原理详解(简单易懂)
  7. js计算字典的个数_JS数据结构与算法_集合字典
  8. nginx配置不记录指定文件类型日志
  9. 题目SPOOLing系统的设计与实现
  10. java putall实现,Java JsonObject.putAll方法代码示例
  11. win11更新后黑屏怎么办 Windows11更新后黑屏的解决方法
  12. 计算机科学研究课题申报书,教育科学研究课题立项申请书范文
  13. 超实用的HTML 5接口全方位测试总结文
  14. oj题目 分解质因数
  15. 答题卡php,答题卡答题注意事项 - 窗外事 - 简单学习网论坛_中高考学习交流论坛_中学生学习论坛 - Powered by phpwind...
  16. android配置jni cmake,Android JNI之青春期 Cmake(android studio)
  17. Android设备实现语音视频通话
  18. 网站关键词优化怎么做的(seo如何挖掘关键词)
  19. 电脑配置jdk环境变量_苹果电脑配置环境变量
  20. CVE-2020-1472 Netlogon权限提升漏洞分析

热门文章

  1. js 封装经纬度成json_全国经纬度json文件
  2. python增量更新数据,Python中的增量最近邻算法
  3. python apriori_python apriori算法代码怎么实现
  4. python聚类的结果显示_使用Python进行聚类
  5. 巨坑!同事离职前一天,偷偷将一个470欧的色环电阻串进我的电源线中......
  6. 计算机可移动磁盘无法显示图片,手机插电脑不显示可移动磁盘的详细解决方法...
  7. java list 删除元素_Java面试题:List如何一边遍历,一边删除?
  8. 20220130---CTF WEB方向---命令执行和URL解码
  9. c++怎么保存汉字_“的汉字 ”写作练习
  10. 计算机开机显示器无显示桌面,电脑开机后显示器不亮故障排除方法