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