using OpenCVForUnity.CoreModule; using UnityEngine; public class PictureUtility { private static Material _flipMaterial; public static Material FlipMaterial { get { if (_flipMaterial == null) _flipMaterial = Resources.Load("Materials/Unlit_FlipHorizontal"); return _flipMaterial; } set => _flipMaterial = value; } public static Texture2D HorizontalFlipTexture(Texture2D texture) { //得到图片的宽高 Texture2D retVal = new Texture2D(texture.width, texture.height); RenderTexture tmp = RenderTexture.GetTemporary(texture.width, texture.height, 0, RenderTextureFormat.ARGB32); Graphics.Blit(texture, tmp, _flipMaterial); RenderTexture.active = tmp; retVal.ReadPixels(new UnityEngine.Rect(0, 0, texture.width, texture.height), 0, 0); RenderTexture.ReleaseTemporary(tmp); return retVal; } public static Mat HorizontalFlipMat(Mat mat) { Mat dst = new Mat(); Core.flip(mat, dst, 1); return dst; } //纠正鱼眼透视畸变 public static Mat Undistort(Mat src) { //摄像机的4个畸变系数:k1,k2,k3,k4 Mat K = new Mat(3, 3, CvType.CV_64FC1); K.put(0, 0, 1151.7, 0, 985.6, 0, 1153.4, 573.004, 0, 0, 1); Mat D = new Mat(5, 1, CvType.CV_64FC1); //D.put(0, 0, -0.42, 0.2196, 0.0038, 0.013, -0.06); D.put(0, 0, -0.01, 0.09, 0, 0, -0.19); Mat retVal = src.clone(); OpenCVForUnity.Calib3dModule.Calib3d.undistort(src, retVal, K, D); return retVal; } }