public Texture2D MatToTexture(Mat mat, Texture2D outTexture = null) { Size size = mat.Size(); if (null == outTexture || outTexture.width != size.Width || outTexture.height != size.Height) { Debug.Log($"outTexture {outTexture.width} : {size.Width}"); } outTexture = new Texture2D(size.Width, size.Height, TextureFormat.RGBA32, false); int count = size.Width * size.Height; Color32Bytes data = new Color32Bytes(); data.byteArray = new byte[count * 4]; data.colors = new Color32[count]; Marshal.Copy(mat.Data, data.byteArray, 0, data.byteArray.Length); outTexture.LoadRawTextureData(data.byteArray); //outTexture.SetPixels32(data.colors); outTexture.Apply(); return(outTexture); }
/// <summary> /// Converts OpenCV Mat to Unity texture /// </summary> /// <returns>Unity texture</returns> /// <param name="mat">OpenCV Mat</param> /// <param name="outTexture">Unity texture to set pixels</param> public static Texture2D MatToTexture(Mat mat, Texture2D outTexture = null) { Size size = mat.Size(); using (Mat unityMat = new Mat(utils_mat_to_texture_2(mat.CvPtr))) { if (null == outTexture || outTexture.width != size.Width || outTexture.height != size.Height) { outTexture = new Texture2D(size.Width, size.Height); } int count = size.Width * size.Height; Color32Bytes data = new Color32Bytes(); data.byteArray = new byte[count * 4]; data.colors = new Color32[count]; Marshal.Copy(unityMat.Data, data.byteArray, 0, data.byteArray.Length); outTexture.SetPixels32(data.colors); outTexture.Apply(); return(outTexture); } }