OpenCV - Добавление границ

В этой главе вы узнаете, как сделать границу изображения жабой.

Метод copyMakeBorder ()

Вы можете добавить к изображению различные границы с помощью метода copyMakeBorder() класса Core, который принадлежит пакету org.opencv.core. Ниже приводится синтаксис этого метода.

copyMakeBorder(src, dst, top, bottom, left, right, borderType)

Этот метод принимает следующие параметры -

  • src - Объект класса Mat представляющий исходное (входное) изображение.

  • dst - Объект класса Mat представляющий конечное (выходное) изображение.

  • top - Целочисленная переменная типа integer, представляющая длину границы в верхней части изображения.

  • bottom - Целочисленная переменная типа integer, представляющая длину границы внизу изображения.

  • left - Целочисленная переменная типа integer, представляющая длину границы слева от изображения.

  • right - Целочисленная переменная типа integer, представляющая длину границы справа от изображения.

  • borderType - Переменная целого типа, представляющая тип границы, которая будет использоваться.

пример

Следующая программа - это пример, демонстрирующий, как добавить границу к данному изображению.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;

public class AddingBorder {
   public static void main( String[] args ) {
      // Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
     
      // Reading the Image from the file and storing it in to a Matrix object
      String file ="E:/OpenCV/chap15/input.jpg";
      Mat src = Imgcodecs.imread(file);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();
   
      Core.copyMakeBorder(src, dst, 20, 20, 20, 20, Core.BORDER_CONSTANT);
      Imgcodecs.imwrite("E:/OpenCV/chap15/border_constant.jpg", dst);

      System.out.println("Image Processed");
   }
}

Предположим, что ниже находится входное изображение thresh_input.jpg указанные в вышеуказанной программе.

Вывод

При выполнении программы вы получите следующий вывод -

Image Processed

Если вы откроете указанный путь, вы можете наблюдать выходное изображение следующим образом:

Другие типы границ

Помимо типа границы, BORDER_CONSTANTпродемонстрированный в предыдущем примере, OpenCV обслуживает различные другие типы границ. Все эти типы представлены предопределенными статическими полями (фиксированными значениями) класса Core.

Вы можете выбрать нужный вам тип пороговой операции, передав соответствующее предопределенное значение параметру с именем borderType из copyMakeBorder() метод.

Core.copyMakeBorder(src, dst, 20, 20, 20, 20, Core.BORDER_CONSTANT);

Ниже приведены значения, представляющие различные типы операций с границами и их соответствующие выходы.

Работа и описание Вывод
BORDER_CONSTANT
BORDER_ISOLATED
BORDER_DEFAULT
BORDER_REFLECT
BORDER_REFLECT_101
BORDER_REFLECT101
BORDER_REPLICATE
BORDER_WRAP