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

在这里插入图片描述

版本:opencvsharp-4.5.3.20211228

我们以三通道图片为例:

1:Mat->byte[]

            Mat mat = Cv2.ImRead(fullpath);//Mat默认通道顺序是Bgr,和Bitmap一致
            var bytes = new byte[mat.Total()*3];//这里必须乘以通道数,不然数组越界,也可以用w*h*c,差不多
            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; // or src.Height * src.Step;
            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转 mat
Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat); // mat 转 bitmap

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

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenCVSharp是一个针对OpenCV库的C#封装。通过使用OpenCVSharp,我们可以在C#中进行图像处理和计算机视觉任务。在OpenCVSharp中,mat和bitmap之间的相互转换可以使用OpenCvSharp.Extensions.BitmapConverter类中提供的方法来完成。例如,要将一个bitmap转换mat,可以使用OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap)方法。同样地,要将一个mat转换为bitmap,可以使用OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat)方法。请注意,为了确保转换的准确性,请确保使用官方的OpenCvSharp.Extensions.dll包中的方法进行转换,而不是自己编写转换代码。你可以在这个链接中找到关于如何使用OpenCvSharp.Extensions.BitmapConverter的更多信息。还有和提供了一些参考链接,可供你进一步了解如何在OpenCVSharp中处理mat和bitmap。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【OpenCVSharp Matbyte[]互相转换】](https://blog.csdn.net/weixin_44029053/article/details/124601553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [OpenCvSharp Bitmap Mat](https://blog.csdn.net/weixin_44675148/article/details/95306557)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值