1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import org.opencv.core.Core;
- import org.opencv.core.CvType;
- import org.opencv.core.Mat;
- import org.opencv.highgui.HighGui;
- import org.opencv.imgcodecs.Imgcodecs;
- import org.opencv.imgproc.Imgproc;
- class Remap {
- private Mat mapX = new Mat();
- private Mat mapY = new Mat();
- private Mat dst = new Mat();
- private int ind = 0;
- //! [Update]
- private void updateMap() {
- float buffX[] = new float[(int) (mapX.total() * mapX.channels())];
- mapX.get(0, 0, buffX);
- float buffY[] = new float[(int) (mapY.total() * mapY.channels())];
- mapY.get(0, 0, buffY);
- for (int i = 0; i < mapX.rows(); i++) {
- for (int j = 0; j < mapX.cols(); j++) {
- switch (ind) {
- case 0:
- if( j > mapX.cols()*0.25 && j < mapX.cols()*0.75 && i > mapX.rows()*0.25 && i < mapX.rows()*0.75 ) {
- buffX[i*mapX.cols() + j] = 2*( j - mapX.cols()*0.25f ) + 0.5f;
- buffY[i*mapY.cols() + j] = 2*( i - mapX.rows()*0.25f ) + 0.5f;
- } else {
- buffX[i*mapX.cols() + j] = 0;
- buffY[i*mapY.cols() + j] = 0;
- }
- break;
- case 1:
- buffX[i*mapX.cols() + j] = j;
- buffY[i*mapY.cols() + j] = mapY.rows() - i;
- break;
- case 2:
- buffX[i*mapX.cols() + j] = mapY.cols() - j;
- buffY[i*mapY.cols() + j] = i;
- break;
- case 3:
- buffX[i*mapX.cols() + j] = mapY.cols() - j;
- buffY[i*mapY.cols() + j] = mapY.rows() - i;
- break;
- default:
- break;
- }
- }
- }
- mapX.put(0, 0, buffX);
- mapY.put(0, 0, buffY);
- ind = (ind+1) % 4;
- }
- //! [Update]
- public void run(String[] args) {
- String filename = args.length > 0 ? args[0] : "../data/chicky_512.png";
- //! [Load]
- Mat src = Imgcodecs.imread(filename, Imgcodecs.IMREAD_COLOR);
- if (src.empty()) {
- System.err.println("Cannot read image: " + filename);
- System.exit(0);
- }
- //! [Load]
- //! [Create]
- mapX = new Mat(src.size(), CvType.CV_32F);
- mapY = new Mat(src.size(), CvType.CV_32F);
- //! [Create]
- //! [Window]
- final String winname = "Remap demo";
- HighGui.namedWindow(winname, HighGui.WINDOW_AUTOSIZE);
- //! [Window]
- //! [Loop]
- for (;;) {
- updateMap();
- Imgproc.remap(src, dst, mapX, mapY, Imgproc.INTER_LINEAR);
- HighGui.imshow(winname, dst);
- if (HighGui.waitKey(1000) == 27) {
- break;
- }
- }
- //! [Loop]
- System.exit(0);
- }
- }
- public class RemapDemo {
- public static void main(String[] args) {
- // Load the native OpenCV library
- System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
- new Remap().run(args);
- }
- }
|