VisionMater-ImageBaseData_V2与Mat互转
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using VM.PlatformSDKCS;
namespace VisionMater_Simple.VMTools
{
/// <summary>
/// 图片类型转化
/// </summary>
public class ImgConvertTools
{
/// <summary>
/// ImageBaseData_V2 转 Mat图片
/// </summary>
/// <param name="imageBaseData_V2">ImageBaseData_V2图片</param>
/// <returns></returns>
public static Mat ImageBaseData_V2ToMat(ImageBaseData_V2 imageBaseData_V2)
{
Mat mat = new Mat();
byte[] buffer = new byte[imageBaseData_V2.DataLen];
Marshal.Copy(imageBaseData_V2.ImageData, buffer, 0, buffer.Length);
if (VMPixelFormat.VM_PIXEL_MONO_08 == imageBaseData_V2.Pixelformat)
{
mat.Create(imageBaseData_V2.Height, imageBaseData_V2.Width, MatType.CV_8UC1);
Marshal.Copy(buffer, 0, mat.Ptr(0), buffer.Length);
}
else if (VMPixelFormat.VM_PIXEL_RGB24_C3 == imageBaseData_V2.Pixelformat)
{
mat.Create(imageBaseData_V2.Height, imageBaseData_V2.Width, MatType.CV_8UC3);
//交换R与B通道
for (int i = 0; i < buffer.Length - 2; i += 3)
{
byte temp = buffer[i];
buffer[i] = buffer[i + 2];
buffer[i + 2] = temp;
}
Marshal.Copy(buffer, 0, mat.Ptr(0), buffer.Length);
}
return mat;
}
/// <summary>
/// Mat 转 ImageBaseData_V2图片
/// </summary>
/// <param name="matInputImg">Mat图片</param>
/// <returns></returns>
public static ImageBaseData_V2 MatToImageBaseData_V2(Mat matInputImg)
{
ImageBaseData_V2 imageBaseData_V2 = new ImageBaseData_V2();
uint dataLen = (uint)(matInputImg.Width * matInputImg.Height * matInputImg.Channels());
if (1 == matInputImg.Channels())
imageBaseData_V2 = new ImageBaseData_V2(matInputImg.Ptr(0), dataLen, matInputImg.Width, matInputImg.Height, VMPixelFormat.VM_PIXEL_MONO_08);
else if (3 == matInputImg.Channels())
{
//交换R与B通道
Cv2.CvtColor(matInputImg, matInputImg, ColorConversionCodes.BGR2RGB);
imageBaseData_V2 = new ImageBaseData_V2(matInputImg.Ptr(0), dataLen, matInputImg.Width, matInputImg.Height, VMPixelFormat.VM_PIXEL_RGB24_C3);
}
return imageBaseData_V2;
}
}
}
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/19016985