content: import org.opencv.core.Core;
  import org.opencv.core.CvType;
  import org.opencv.core.Mat;
  import org.opencv.core.Scalar;
  import org.opencv.highgui.HighGui;
  import org.opencv.imgcodecs.Imgcodecs;
  import org.opencv.imgproc.Imgproc;
  
  class MatMaskOperationsRun {
  
      public void run(String[] args) {
  
          String filename = "../data/lena.jpg";
  
          int img_codec = Imgcodecs.IMREAD_COLOR;
          if (args.length != 0) {
              filename = args[0];
              if (args.length >= 2 && args[1].equals("G"))
                  img_codec = Imgcodecs.IMREAD_GRAYSCALE;
          }
  
          Mat src = Imgcodecs.imread(filename, img_codec);
  
          if (src.empty()) {
              System.out.println("Can't open image [" + filename + "]");
              System.out.println("Program Arguments: [image_path -- default ../data/lena.jpg] [G -- grayscale]");
              System.exit(-1);
          }
  
          HighGui.namedWindow("Input", HighGui.WINDOW_AUTOSIZE);
          HighGui.namedWindow("Output", HighGui.WINDOW_AUTOSIZE);
  
          HighGui.imshow( "Input", src );
          double t = System.currentTimeMillis();
  
          Mat dst0 = sharpen(src, new Mat());
  
          t = ((double) System.currentTimeMillis() - t) / 1000;
          System.out.println("Hand written function time passed in seconds: " + t);
  
          HighGui.imshow( "Output", dst0 );
          HighGui.moveWindow("Output", 400, 400);
          HighGui.waitKey();
  
          //![kern]
          Mat kern = new Mat(3, 3, CvType.CV_8S);
          int row = 0, col = 0;
          kern.put(row, col, 0, -1, 0, -1, 5, -1, 0, -1, 0);
          //![kern]
  
          t = System.currentTimeMillis();
  
          Mat dst1 = new Mat();
          //![filter2D]
          Imgproc.filter2D(src, dst1, src.depth(), kern);
          //![filter2D]
          t = ((double) System.currentTimeMillis() - t) / 1000;
          System.out.println("Built-in filter2D time passed in seconds:     " + t);
  
          HighGui.imshow( "Output", dst1 );
  
          HighGui.waitKey();
          System.exit(0);
      }
  
      //! [basic_method]
      public static double saturate(double x) {
          return x > 255.0 ? 255.0 : (x < 0.0 ? 0.0 : x);
      }
  
      public Mat sharpen(Mat myImage, Mat Result) {
          //! [8_bit]
          myImage.convertTo(myImage, CvType.CV_8U);
          //! [8_bit]
  
          //! [create_channels]
          int nChannels = myImage.channels();
          Result.create(myImage.size(), myImage.type());
          //! [create_channels]
  
          //! [basic_method_loop]
          for (int j = 1; j < myImage.rows() - 1; ++j) {
              for (int i = 1; i < myImage.cols() - 1; ++i) {
                  double sum[] = new double[nChannels];
  
                  for (int k = 0; k < nChannels; ++k) {
  
                      double top = -myImage.get(j - 1, i)[k];
                      double bottom = -myImage.get(j + 1, i)[k];
                      double center = (5 * myImage.get(j, i)[k]);
                      double left = -myImage.get(j, i - 1)[k];
                      double right = -myImage.get(j, i + 1)[k];
  
                      sum[k] = saturate(top + bottom + center + left + right);
                  }
  
                  Result.put(j, i, sum);
              }
          }
          //! [basic_method_loop]
  
          //! [borders]
          Result.row(0).setTo(new Scalar(0));
          Result.row(Result.rows() - 1).setTo(new Scalar(0));
          Result.col(0).setTo(new Scalar(0));
          Result.col(Result.cols() - 1).setTo(new Scalar(0));
          //! [borders]
  
          return Result;
      }
      //! [basic_method]
  }
  
  public class MatMaskOperations {
      public static void main(String[] args) {
          // Load the native library.
          System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
          new MatMaskOperationsRun().run(args);
      }
  }
  