OpenCV - Adición de bordes

Este capítulo le enseña cómo agregar bordes a una imagen.

El método copyMakeBorder ()

Puede agregar varios bordes a una imagen usando el método copyMakeBorder() de la clase denominada Core, que pertenece al paquete org.opencv.core. A continuación se muestra la sintaxis de este método.

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

Este método acepta los siguientes parámetros:

  • src - Un objeto de la clase Mat que representa la imagen de origen (entrada).

  • dst - Un objeto de la clase Mat que representa la imagen de destino (salida).

  • top - Una variable de entero del tipo entero que representa la longitud del borde en la parte superior de la imagen.

  • bottom - Una variable de entero del tipo entero que representa la longitud del borde en la parte inferior de la imagen.

  • left - Una variable de entero del tipo entero que representa la longitud del borde a la izquierda de la imagen.

  • right - Una variable de entero del tipo entero que representa la longitud del borde a la derecha de la imagen.

  • borderType - Una variable de tipo entero que representa el tipo de borde que se va a utilizar.

Ejemplo

El siguiente programa es un ejemplo que demuestra cómo agregar un borde a una imagen determinada.

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");
   }
}

Suponga que la siguiente es la imagen de entrada thresh_input.jpg especificado en el programa anterior.

Salida

Al ejecutar el programa, obtendrá el siguiente resultado:

Image Processed

Si abre la ruta especificada, puede observar la imagen de salida de la siguiente manera:

Otros tipos de fronteras

Además del tipo de borde, BORDER_CONSTANTComo se demostró en el ejemplo anterior, OpenCV se adapta a otros tipos de fronteras. Todos estos tipos están representados por campos estáticos predefinidos (valores fijos) de clase Core.

Puede elegir el tipo de operación de umbral que necesita, pasando su valor predefinido respectivo al parámetro denominado borderType del copyMakeBorder() método.

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

A continuación se muestran los valores que representan varios tipos de operaciones fronterizas y sus respectivos resultados.

Operación y descripción Salida
BORDER_CONSTANT
BORDER_ISOLATED
BORDER_DEFAULT
BORDER_REFLECT
BORDER_REFLECT_101
BORDER_REFLECT101
BORDER_REPLICATE
BORDER_WRAP