1 import org.opencv.core.Core;
2 import org.opencv.core.CvType;
3 import org.opencv.core.Mat;
4 import org.opencv.highgui.HighGui;
5 import org.opencv.imgcodecs.Imgcodecs;
6 import org.opencv.imgproc.Imgproc;
7 
8 class Remap {
9     private Mat mapX = new Mat();
10     private Mat mapY = new Mat();
11     private Mat dst = new Mat();
12     private int ind = 0;
13 
14     //! [Update]
updateMap()15     private void updateMap() {
16         float buffX[] = new float[(int) (mapX.total() * mapX.channels())];
17         mapX.get(0, 0, buffX);
18 
19         float buffY[] = new float[(int) (mapY.total() * mapY.channels())];
20         mapY.get(0, 0, buffY);
21 
22         for (int i = 0; i < mapX.rows(); i++) {
23             for (int j = 0; j < mapX.cols(); j++) {
24                 switch (ind) {
25                 case 0:
26                     if( j > mapX.cols()*0.25 && j < mapX.cols()*0.75 && i > mapX.rows()*0.25 && i < mapX.rows()*0.75 ) {
27                         buffX[i*mapX.cols() + j] = 2*( j - mapX.cols()*0.25f ) + 0.5f;
28                         buffY[i*mapY.cols() + j] = 2*( i - mapX.rows()*0.25f ) + 0.5f;
29                     } else {
30                         buffX[i*mapX.cols() + j] = 0;
31                         buffY[i*mapY.cols() + j] = 0;
32                     }
33                     break;
34                 case 1:
35                     buffX[i*mapX.cols() + j] = j;
36                     buffY[i*mapY.cols() + j] = mapY.rows() - i;
37                     break;
38                 case 2:
39                     buffX[i*mapX.cols() + j] = mapY.cols() - j;
40                     buffY[i*mapY.cols() + j] = i;
41                     break;
42                 case 3:
43                     buffX[i*mapX.cols() + j] = mapY.cols() - j;
44                     buffY[i*mapY.cols() + j] = mapY.rows() - i;
45                     break;
46                 default:
47                     break;
48                 }
49             }
50         }
51         mapX.put(0, 0, buffX);
52         mapY.put(0, 0, buffY);
53         ind = (ind+1) % 4;
54     }
55     //! [Update]
56 
run(String[] args)57     public void run(String[] args) {
58         String filename = args.length > 0 ? args[0] : "../data/chicky_512.png";
59         //! [Load]
60         Mat src = Imgcodecs.imread(filename, Imgcodecs.IMREAD_COLOR);
61         if (src.empty()) {
62             System.err.println("Cannot read image: " + filename);
63             System.exit(0);
64         }
65         //! [Load]
66 
67         //! [Create]
68         mapX = new Mat(src.size(), CvType.CV_32F);
69         mapY = new Mat(src.size(), CvType.CV_32F);
70         //! [Create]
71 
72         //! [Window]
73         final String winname = "Remap demo";
74         HighGui.namedWindow(winname, HighGui.WINDOW_AUTOSIZE);
75         //! [Window]
76 
77         //! [Loop]
78         for (;;) {
79             updateMap();
80             Imgproc.remap(src, dst, mapX, mapY, Imgproc.INTER_LINEAR);
81             HighGui.imshow(winname, dst);
82             if (HighGui.waitKey(1000) == 27) {
83                 break;
84             }
85         }
86         //! [Loop]
87         System.exit(0);
88     }
89 }
90 
91 public class RemapDemo {
main(String[] args)92     public static void main(String[] args) {
93         // Load the native OpenCV library
94         System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
95 
96         new Remap().run(args);
97     }
98 }
99