以我C++ DLL我从字节数组创建垫创建垫:OpenCV中从字节数组
BYTE * ptrImageData; //Image data is in this array passed to this function
Mat newImg = Mat(nImageHeight, nImageWidth, CV_8UC3, ptrImageData);
的图像与一些灰色阴影不是原来的一个创建。
这是从字节数组创建Mat的正确方法吗?
请参阅代码
ptrImageData传递到从C#代码的C++ DLL。
C#代码来传递该图像数据
System.Drawing.Image srcImage //Has the image
MemoryStream ms = new MemoryStream();
Marshal.FreeHGlobal(ptrImageData);
srcImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] imgArray = ms.ToArray();
ms.Dispose();
int size1 = Marshal.SizeOf(imgArray[0]) * imgArray.Length;
IntPtr ptrImageData = Marshal.AllocHGlobal(size1);
Marshal.Copy(imgArray, 0, ptrImageData, imgArray.Length);
//Calling C++ dll function
ProcessImage(ptrImageData, srcImage.Width, srcImage.Height);
Marshal.FreeHGlobal(ptrImageData);
我认为你的C++代码有一些错误,Mat newImg(...)或Mat * newImg = new Mat(..),你的写作不是C++风格。 – Healer
@healer ..代码是正确的。在上面的代码中,'newImg'正在使用'Mat'类的'explicit'构造函数初始化。 – sgarizvi
请提供更详细的代码,如你如何显示图像,“ptrImageData”的布局是什么。 – luhb