版本:opencvsharp-4.5.3.20211228
我们以三通道图片为例:
1:Mat->byte[]
Mat mat = Cv2.ImRead(fullpath);
var bytes = new byte[mat.Total()*3];
Marshal.Copy(mat.Data, bytes, 0, bytes.Length);
2:byte[]->Mat
var src = new Mat(height, width, MatType.CV_8UC3);
int length = height * width * 3;
Marshal.Copy(data, 0, src.Data, length);
其中,宽高可以这样获取:
var height = mat.Rows;
var width = mat.Cols;
var channels = mat.Channels();
var mattype = mat.Type();
PS:如果是对于Bitmap的图片,推荐用官方的包里的方法去转换不会出错:OpenCvSharp.Extensions.dll
里面有Bitmap和Mat的互相转换
Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(image);
Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
PS:CPP版可以参考https://blog.csdn.net/ImgLearning/article/details/79924676,其中byte 为unsigned char的宏
PS:另外用Unity的小伙伴还可以把Color32[]转化为指针,和OpenCVSharp或Native数据交流
var pixels = texture2D.GetPixels32();
GCHandle pixelHandle = GCHandle.Alloc(pixels, GCHandleType.Pinned);
IntPtr pixelPointer = pixelHandle.AddrOfPinnedObject();
ref:
https://github.com/shimat/opencvsharp/issues/173
https://wiki.onakasuita.org/pukiwiki/?OpenCvSharp.Mat
https://blog.csdn.net/qq_36390344/article/details/105029771
Original: https://blog.csdn.net/weixin_44029053/article/details/124601553
Author: superowner001
Title: 【OpenCVSharp Mat和byte[]互相转换】
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/701326/
转载文章受原作者版权保护。转载请注明原作者出处!