Ejemplo n.º 1
0
        // Use this for initialization
        void Start()
        {
            Texture2D imgTexture = Resources.Load("chessboard") as Texture2D;

            Mat imgMat = new Mat(imgTexture.height, imgTexture.width, CvType.CV_8UC3);

            Utils.texture2DToMat(imgTexture, imgMat);
            Debug.Log("imgMat dst ToString " + imgMat.ToString());



            Imgproc.line(imgMat, new Point(50, 50), new Point(400, 105), new Scalar(0, 0, 200), 3);

            Imgproc.rectangle(imgMat, new Point(150, 200), new Point(300, 300), new Scalar(0, 200, 0), 5);

            Imgproc.circle(imgMat, new Point(500, 300), 80, new Scalar(200, 0, 0), 1);

            Imgproc.arrowedLine(imgMat, new Point(100, 500), new Point(550, 350), new Scalar(255, 255, 0), 4, Core.LINE_8, 0, 0.1);


            double angle = 100;

            Imgproc.ellipse(imgMat, new Point(200, 400), new Size(80, 150), angle, angle - 200, angle + 100, new Scalar(255, 255, 255), -1);


            int[] face = { Core.FONT_HERSHEY_SIMPLEX,        Core.FONT_HERSHEY_PLAIN,         Core.FONT_HERSHEY_DUPLEX,         Core.FONT_HERSHEY_COMPLEX,
                           Core.FONT_HERSHEY_TRIPLEX,        Core.FONT_HERSHEY_COMPLEX_SMALL, Core.FONT_HERSHEY_SCRIPT_SIMPLEX,
                           Core.FONT_HERSHEY_SCRIPT_COMPLEX, Core.FONT_ITALIC };


            Imgproc.putText(imgMat, "OpenCV", new Point(50, 50), face [0], 1.2, new Scalar(0, 0, 200), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(50, 100), face [1], 1.2, new Scalar(0, 200, 0), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(50, 150), face [2], 1.2, new Scalar(200, 0, 0), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(50, 200), face [3], 1.2, new Scalar(0, 100, 100), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(50, 250), face [4], 1.2, new Scalar(100, 100, 0), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(50, 300), face [5], 1.2, new Scalar(100, 0, 100), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(50, 350), face [6], 1.2, new Scalar(100, 100, 100), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(50, 400), face [7], 1.2, new Scalar(100, 100, 200), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(300, 50), face [0] | face [8], 1.2, new Scalar(100, 200, 100), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(300, 100), face [1] | face [8], 1.2, new Scalar(200, 100, 100), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(300, 150), face [2] | face [8], 1.2, new Scalar(200, 200, 100), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(300, 200), face [3] | face [8], 1.2, new Scalar(200, 100, 200), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(300, 250), face [4] | face [8], 1.2, new Scalar(100, 200, 200), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(300, 300), face [5] | face [8], 1.2, new Scalar(100, 200, 255), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(300, 350), face [6] | face [8], 1.2, new Scalar(100, 255, 200), 2, Imgproc.LINE_AA, false);
            Imgproc.putText(imgMat, "OpenCV", new Point(300, 400), face [7] | face [8], 1.2, new Scalar(255, 200, 100), 2, Imgproc.LINE_AA, false);



            Texture2D texture = new Texture2D(imgMat.cols(), imgMat.rows(), TextureFormat.RGBA32, false);

            Utils.matToTexture2D(imgMat, texture);

            gameObject.GetComponent <Renderer> ().material.mainTexture = texture;
        }
        // Use this for initialization
        void Start()
        {
            //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("lena") as Texture2D;

            Mat img = new Mat(imgTexture.height, imgTexture.width, CvType.CV_8UC4);

            Utils.texture2DToMat(imgTexture, img);
            Debug.Log("imgMat.ToString() " + img.ToString());


            OpenCVForUnity.ShapeModule.ThinPlateSplineShapeTransformer tps = Shape.createThinPlateSplineShapeTransformer(0);
            MatOfPoint2f sourcePoints = new MatOfPoint2f(
                new Point(0, 0),
                new Point(512, 0),
                new Point(0, 512),

                new Point(250, 200),
                new Point(400, 400),
                new Point(200, 400),

                new Point(512, 512)
                );
            MatOfPoint2f targetPoints = new MatOfPoint2f(
                new Point(0, 0),
                new Point(512, 0),
                new Point(0, 599),

                new Point(250, 120),
                new Point(450, 450),
                new Point(100, 450),

                new Point(512, 512)
                );
            MatOfDMatch matches = new MatOfDMatch(
                new DMatch(0, 0, 0),
                new DMatch(1, 1, 0),
                new DMatch(2, 2, 0),
                new DMatch(3, 3, 0),
                new DMatch(4, 4, 0),
                new DMatch(5, 5, 0),
                new DMatch(6, 6, 0)
                );


            //http://stackoverflow.com/questions/32207085/shape-transformers-and-interfaces-opencv3-0
            Core.transpose(sourcePoints, sourcePoints);
            Core.transpose(targetPoints, targetPoints);

            Debug.Log("sourcePoints " + sourcePoints.ToString());
            Debug.Log("targetPoints " + targetPoints.ToString());

            tps.estimateTransformation(targetPoints, sourcePoints, matches);

            MatOfPoint2f transPoints = new MatOfPoint2f();

            tps.applyTransformation(sourcePoints, transPoints);

            Debug.Log("sourcePoints " + sourcePoints.dump());
            Debug.Log("targetPoints " + targetPoints.dump());
            Debug.Log("transPoints " + transPoints.dump());


            Mat res = new Mat();

            tps.warpImage(img, res);

            //plot points
            Point[] sourcePointsArray = sourcePoints.toArray();
            Point[] targetPointsArray = targetPoints.toArray();
            for (int i = 0; i < sourcePointsArray.Length; i++)
            {
                Imgproc.arrowedLine(res, sourcePointsArray [i], targetPointsArray [i], new Scalar(255, 255, 0, 255), 3, Imgproc.LINE_AA, 0, 0.2);

                Imgproc.circle(res, sourcePointsArray [i], 10, new Scalar(255, 0, 0, 255), -1);
                Imgproc.circle(res, targetPointsArray [i], 10, new Scalar(0, 0, 255, 255), -1);
            }


            Texture2D texture = new Texture2D(res.cols(), res.rows(), TextureFormat.RGBA32, false);

            Utils.matToTexture2D(res, texture);

            gameObject.GetComponent <Renderer> ().material.mainTexture = texture;


            Utils.setDebugMode(false);
        }