File: GeometricTransformsDemo.java

package info (click to toggle)
opencv 4.10.0%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 282,092 kB
  • sloc: cpp: 1,178,079; xml: 682,621; python: 49,092; lisp: 31,150; java: 25,469; ansic: 11,039; javascript: 6,085; sh: 1,214; cs: 601; perl: 494; objc: 210; makefile: 173
file content (80 lines) | stat: -rw-r--r-- 2,964 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.Point;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

class GeometricTransforms {
    public void run(String[] args) {
        //! [Load the image]
        String filename = args.length > 0 ? args[0] : "../data/lena.jpg";
        Mat src = Imgcodecs.imread(filename);
        if (src.empty()) {
            System.err.println("Cannot read image: " + filename);
            System.exit(0);
        }
        //! [Load the image]

        //! [Set your 3 points to calculate the  Affine Transform]
        Point[] srcTri = new Point[3];
        srcTri[0] = new Point( 0, 0 );
        srcTri[1] = new Point( src.cols() - 1, 0 );
        srcTri[2] = new Point( 0, src.rows() - 1 );

        Point[] dstTri = new Point[3];
        dstTri[0] = new Point( 0, src.rows()*0.33 );
        dstTri[1] = new Point( src.cols()*0.85, src.rows()*0.25 );
        dstTri[2] = new Point( src.cols()*0.15, src.rows()*0.7 );
        //! [Set your 3 points to calculate the  Affine Transform]

        //! [Get the Affine Transform]
        Mat warpMat = Imgproc.getAffineTransform( new MatOfPoint2f(srcTri), new MatOfPoint2f(dstTri) );
        //! [Get the Affine Transform]

        //! [Apply the Affine Transform just found to the src image]
        Mat warpDst = Mat.zeros( src.rows(), src.cols(), src.type() );

        Imgproc.warpAffine( src, warpDst, warpMat, warpDst.size() );
        //! [Apply the Affine Transform just found to the src image]

        /** Rotating the image after Warp */

        //! [Compute a rotation matrix with respect to the center of the image]
        Point center = new Point(warpDst.cols() / 2, warpDst.rows() / 2);
        double angle = -50.0;
        double scale = 0.6;
        //! [Compute a rotation matrix with respect to the center of the image]

        //! [Get the rotation matrix with the specifications above]
        Mat rotMat = Imgproc.getRotationMatrix2D( center, angle, scale );
        //! [Get the rotation matrix with the specifications above]

        //! [Rotate the warped image]
        Mat warpRotateDst = new Mat();
        Imgproc.warpAffine( warpDst, warpRotateDst, rotMat, warpDst.size() );
        //! [Rotate the warped image]

        //! [Show what you got]
        HighGui.imshow( "Source image", src );
        HighGui.imshow( "Warp", warpDst );
        HighGui.imshow( "Warp + Rotate", warpRotateDst );
        //! [Show what you got]

        //! [Wait until user exits the program]
        HighGui.waitKey(0);
        //! [Wait until user exits the program]

        System.exit(0);
    }
}

public class GeometricTransformsDemo {
    public static void main(String[] args) {
        // Load the native OpenCV library
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        new GeometricTransforms().run(args);
    }
}