Apertura | Transformaciones morfológicas en OpenCV en C++

En este artículo se discute una operación Morfológica llamada Apertura.

La operación de apertura es similar a la erosión en el sentido de que también elimina los píxeles de primer plano de los bordes de la imagen. La operación de apertura es una operación de erosión seguida de dilatación . Por lo general, se usa para eliminar el ruido interno presente dentro de una imagen. Este operador salvaguarda la región de primer plano que tiene similitud con el componente estructurante o la que encaja dentro del elemento estructurante mientras elimina todo lo demás.

Sintaxis:

morphologyEx (src, dst, op, kernel, ancla, iteraciones, borderType, borderValue)

Parámetros:

  • src: Es la imagen de entrada.
  • dst: Es la imagen de salida.
  • op: Tipo de operación morfológica.
  • Núcleo: Elemento estructurante utilizado para el Cierre.
  • ancla: Posición del ancla en el interior del elemento estructurante. El valor predeterminado es [-1, -1} que significa posición como el centro del elemento de estructuración.
  • iteraciones: Número de veces que se aplica Closing.
  • borderType: Tipo de borde ( BORDER_CONSTANT, BORDER_REPLICATE, etc.)
  • borderValue: valor del borde
  • Devolución: imagen de salida (objeto Mat)

El operador de apertura viene dado por la expresión:

La expresión representa que A o B es un subconjunto (subimagen de A). El operador de apertura elimina el ruido interno y las protuberancias delgadas presentes dentro de una imagen.

A continuación se muestra el programa C++ para demostrar la operación morfológica de apertura:

C++

// C++ program to demonstrate the
// opening morphological transformation
#include <iostream>
#include <opencv2/core/core.hpp>
  
// Library include for drawing shapes
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace cv;
using namespace std;
  
// Function to demonstrate the
// opening morphological operator
int openingMorphological()
{
    // Reading the Image
    Mat image = imread(
        "C:/Users/harsh/Downloads/geeks.png",
        IMREAD_GRAYSCALE);
  
    // Check if the image is
    // created successfully or not
    if (!image.data) {
        cout << "Could not open or"
             << " find the image\n";
  
        return 0;
    }
  
    // Create a structuring element
    int morph_size = 2;
    Mat element = getStructuringElement(
        MORPH_RECT,
        Size(2 * morph_size + 1,
             2 * morph_size + 1),
        Point(morph_size,
              morph_size));
    Mat output;
  
    // Opening
    morphologyEx(image, output,
                 MORPH_OPEN, element,
                 Point(-1, -1), 2);
  
    // Display the image
    imshow("source", image);
    imshow("Opening", output);
    waitKey();
  
    return 0;
}
  
// Driver Code
int main()
{
  
    openingMorphological();
  
    return 0;
}

Producción:

Publicación traducida automáticamente

Artículo escrito por Captain_JackSparrow y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *