【OpenCVSharp Mat和byte[]互相转换】

【OpenCVSharp Mat和byte[]互相转换】

版本: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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球