unity3d的Texture2D与opencv的Mat之间的相互转换

时间:2023-02-08 11:04:18

这里的opencv使用的是opencvsharp,它是c#语言对c++的opencv的一层封装,使得c#开发者可以更方便的使用opencv,而不必纠结于跨语言调用的问题。

因此,这里使用的opencv的api可能和原本的c++版本的api不太一样,具体请参阅opencvsharp的文档。

1. Mat to Texture2D

    1.1 通过png编码

int w=...
int h=...
...
Texture2D tex
=new Texture2D(w,h,TextureFormat.RGB24,false,false);
Mat mat
= new Mat(h,w, MatType.CV_8UC3);
...
//the key code
tex.LoadImage (mat.ToBytes(".png"));

   1.2 通过原始像素矩阵(数组)

 

2.Texture2D to Mat

    2.1 通过png编码

int w=...
int h=...
...
Texture2D tex
=new Texture2D(w,h,TextureFormat.RGB24,false,false);

...
//the key code
Mat mat=Mat.FromImageData(tex.EncodeToPNG());

    2.2 通过原始像素矩阵(数组)

int w=...
int h=...
...
Texture2D tex
=new Texture2D(w,h,TextureFormat.RGB24,false,false);

//key code
Mat mat= new Mat(h, w, MatType.CV_8UC3, tex.GetRawTextureData());
Cv2.CvtColor(mat, mat, ColorConversion.BgrToRgb);
Cv2.Flip(mat, mat, FlipMode.X);