示例#1
0
    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);
    }
示例#2
0
        /// <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);
            }
        }