以我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