OpenCV - Operações Morfológicas

Nos capítulos anteriores, discutimos o processo de erosion e dilation. Além desses dois, o OpenCV apresenta mais transformações morfológicas. omorphologyEx() do método da aula Imgproc é usado para realizar essas operações em uma determinada imagem.

A seguir está a sintaxe deste método -

morphologyEx(src, dst, op, kernel)

Este método aceita os seguintes parâmetros -

  • src - Um objeto da aula Mat representando a imagem de origem (entrada).

  • dst - objeto da aula Mat representando a imagem de destino (saída).

  • op - Um número inteiro que representa o tipo de operação morfológica.

  • kernel - Uma matriz de kernel.

Exemplo

O programa a seguir demonstra como aplicar a operação morfológica "top-hat" em uma imagem usando a biblioteca OpenCV.

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class MorphologyExTest {
   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/chap12/morph_input.jpg";
      Mat src = Imgcodecs.imread(file);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();

      // Creating kernel matrix
      Mat kernel = Mat.ones(5,5, CvType.CV_32F);

      // Applying Blur effect on the Image 
      Imgproc.morphologyEx(src, dst, Imgproc.MORPH_TOPHAT, kernel);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap12/morph_tophat.jpg", dst);

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

Suponha que a seguir está a imagem de entrada morph_input.jpg especificado no programa acima.

Resultado

Ao executar o programa, você obterá a seguinte saída -

Image Processed

Se você abrir o caminho especificado, poderá observar a imagem de saída da seguinte maneira -

Mais operações

Além da operação morfológica TOPHAT, demonstrado no anterior example, OpenCV atende vários outros tipos de morfologias. Todos esses tipos são representados por campos estáticos predefinidos (valores fixos) deImgproc classe.

Você pode escolher o tipo de morfologia que você precisa passando seus respectivos valores predefinidos para o parâmetro op do morphologyEx() método.

// Applying Blur effect on the Image
Imgproc.morphologyEx(src, dst, Imgproc.MORPH_TOPHAT, kernel);

A seguir estão os valores que representam o tipo de operações morfológicas e suas respectivas saídas.

Operação e descrição Resultado
MORPH_BLACKHAT
MORPH_CLOSE
MORPH_CROSS
MORPH_DILATE
MORPH_ELLIPSE
MORPH_ERODE
MORPH_GRADIENT
MORPH_OPEN
MORPH_RECT
MORPH_TOPHAT