using System.Collections; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using OpenCVForUnity.CoreModule; using OpenCVForUnity.ImgprocModule; using OpenCVForUnity.ImgcodecsModule; using OpenCVForUnity.UnityUtils; namespace OpenCVForUnityExample { [RequireComponent(typeof(Camera))] public class ImwriteScreenCaptureExample : MonoBehaviour { /// /// The cube. /// public GameObject cube; /// /// The save path input field. /// public InputField savePathInputField; /// /// The capture flag. /// bool captureFlag = false; /// /// The save path. /// string savePath; // Use this for initialization void Start() { savePath = Application.persistentDataPath + "/ImwriteScreenCaptureExample_output.jpg"; //if true, The error log of the Native side OpenCV will be displayed on the Unity Editor Console. Utils.setDebugMode(true); Texture2D imgTexture = Resources.Load("face") as Texture2D; Mat imgMat = new Mat(imgTexture.height, imgTexture.width, CvType.CV_8UC4); Utils.texture2DToMat(imgTexture, imgMat); Debug.Log("imgMat.ToString() " + imgMat.ToString()); Texture2D texture = new Texture2D(imgMat.cols(), imgMat.rows(), TextureFormat.RGBA32, false); Utils.matToTexture2D(imgMat, texture); cube.GetComponent().material.mainTexture = texture; Utils.setDebugMode(false); } /// /// Raises the render image event. /// /// Source. /// Destination. void OnRenderImage(RenderTexture source, RenderTexture destination) { if (captureFlag) { //Debug.Log ("source.width " + source.width + "source.height " + source.height); Mat cameraMat = new Mat(source.height, source.width, CvType.CV_8UC4); Texture2D texture = new Texture2D(cameraMat.width(), cameraMat.height(), TextureFormat.ARGB32, false); Utils.textureToTexture2D(source, texture); Utils.texture2DToMat(texture, cameraMat); Imgproc.cvtColor(cameraMat, cameraMat, Imgproc.COLOR_RGBA2BGRA); Imgproc.rectangle(cameraMat, new Point(0, 0), new Point(cameraMat.width(), cameraMat.height()), new Scalar(0, 0, 255, 255), 3); Imgproc.putText(cameraMat, "SavePath:", new Point(5, cameraMat.rows() - 30), Imgproc.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar(0, 0, 255), 2, Imgproc.LINE_AA, false); Imgproc.putText(cameraMat, savePath, new Point(5, cameraMat.rows() - 8), Imgproc.FONT_HERSHEY_SIMPLEX, 0.5, new Scalar(255, 255, 255), 0, Imgproc.LINE_AA, false); Imgcodecs.imwrite(savePath, cameraMat); savePathInputField.text = savePath; Debug.Log("savePath: " + savePath); captureFlag = false; } Graphics.Blit(source, destination); } /// /// Raises the back button click event. /// public void OnBackButtonClick() { SceneManager.LoadScene("OpenCVForUnityExample"); } /// /// Raises the capture screen button click event. /// public void OnCaptureScreenButtonClick() { captureFlag = true; } /// /// Raises the load screen button click event. /// public void OnLoadScreenButtonClick() { Mat loadMat = Imgcodecs.imread(savePath); Debug.Log("loadMat.ToString() " + loadMat.ToString()); if (loadMat.width() != 0 && loadMat.height() != 0) { Texture2D texture = new Texture2D(loadMat.width(), loadMat.height(), TextureFormat.RGBA32, false); Imgproc.cvtColor(loadMat, loadMat, Imgproc.COLOR_BGR2RGB); Utils.matToTexture2D(loadMat, texture); cube.GetComponent().material.mainTexture = texture; } } } }