[英]How can I convert OpenCV Mat to Texture2D in Unity using C# script?
我只想将Mat类型变量转换为Texture2D类型。
我可以将texture2D转换为mat,这只能使用EncodeToJPG()函数。 像这样:
Mat mat = Mat.FromImageData(_texture.EncodeToPNG());
Texture2D-> Mat很容易...但是我不能转换“ MAT-> Texture2D”
对于opencvsharp,请使用Mat.GetArray
来获取mat的字节数组数据,然后根据mat的高度和宽度在其上循环。 在该循环中将mat数据复制到Color32
,最后使用Texture2D.SetPixels32()
和Texture2D.Apply()
设置和应用像素。
void MatToTexture(Mat sourceMat)
{
//Get the height and width of the Mat
int imgHeight = sourceMat.Height;
int imgWidth = sourceMat.Width;
byte[] matData = new byte[imgHeight * imgWidth];
//Get the byte array and store in matData
sourceMat.GetArray(0, 0, matData);
//Create the Color array that will hold the pixels
Color32[] c = new Color32[imgHeight * imgWidth];
//Get the pixel data from parallel loop
Parallel.For(0, imgHeight, i => {
for (var j = 0; j < imgWidth; j++) {
byte vec = matData[j + i * imgWidth];
var color32 = new Color32 {
r = vec,
g = vec,
b = vec,
a = 0
};
c[j + i * imgWidth] = color32;
}
});
//Create Texture from the result
Texture2D tex = new Texture2D(imgWidth, imgHeight, TextureFormat.RGBA32, true, true);
tex.SetPixels32(c);
tex.Apply();
}
如果您不是使用opencvsharp,而是使用C ++和C#自己制作插件,请参阅这篇文章。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.