using UnityEngine; using UnityEngine.SceneManagement; using System.Collections; using OpenCVForUnity.CoreModule; using OpenCVForUnity.Calib3dModule; using OpenCVForUnity.UnityUtils; using OpenCVForUnity.ImgcodecsModule; namespace OpenCVForUnityExample { /// /// StereoBM Example /// An example of stereo correspondence using the block matching algorithm. /// Referring to http://docs.opencv.org/trunk/tutorial_py_depthmap.html#gsc.tab=0. /// public class StereoBMExample : MonoBehaviour { // Use this for initialization void Start () { //Read the left and right images Texture2D texLeft = Resources.Load ("tsukuba_l") as Texture2D; Texture2D texRight = Resources.Load ("tsukuba_r") as Texture2D; Mat imgLeft = new Mat (texLeft.height, texLeft.width, CvType.CV_8UC1); Mat imgRight = new Mat (texRight.height, texRight.width, CvType.CV_8UC1); Utils.texture2DToMat (texLeft, imgLeft); Utils.texture2DToMat (texRight, imgRight); //or //Mat imgLeft = Imgcodecs.imread (Utils.getFilePath ("tsukuba_l.png"), Imgcodecs.IMREAD_GRAYSCALE); //Mat imgRight = Imgcodecs.imread (Utils.getFilePath ("tsukuba_r.png"), Imgcodecs.IMREAD_GRAYSCALE); Mat imgDisparity16S = new Mat (imgLeft.rows (), imgLeft.cols (), CvType.CV_16S); Mat imgDisparity8U = new Mat (imgLeft.rows (), imgLeft.cols (), CvType.CV_8UC1); // if (imgLeft.empty () || imgRight.empty ()) { // Debug.Log ("Error reading images "); // } StereoBM sbm = StereoBM.create (16, 15); sbm.compute (imgLeft, imgRight, imgDisparity16S); //normalize to CvType.CV_8U Core.normalize (imgDisparity16S, imgDisparity8U, 0, 255, Core.NORM_MINMAX, CvType.CV_8U); Texture2D texture = new Texture2D (imgDisparity8U.cols (), imgDisparity8U.rows (), TextureFormat.RGBA32, false); Utils.matToTexture2D (imgDisparity8U, texture); gameObject.GetComponent ().material.mainTexture = texture; } // Update is called once per frame void Update () { } /// /// Raises the back button click event. /// public void OnBackButtonClick () { SceneManager.LoadScene ("OpenCVForUnityExample"); } } }