Skip to content
Related Articles
Get the best out of our app
GFG App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Opening | Morphological Transformations in OpenCV in C++

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

In this article, a Morphological operation called Opening is discussed.

Opening operation is similar to erosion in the sense that it also removes foreground pixels from the edges of the image. Opening operation is erosion operation followed by dilation. It is usually used for removing internal noise present inside an image. This operator safeguards the foreground region that has similarity with the structuring component or the one that fits inside the structuring element while removing everything else.

Syntax:

morphologyEx (src, dst, op, kernel, anchor, iterations, borderType, borderValue)

Parameters:

  • src: It is the input image.
  • dst: It is the output image.
  • op: Type of morphological operation.
  • kernel: Structuring element used for Closing.
  • anchor: Anchor position inside the structuring element. The default value is [-1, -1} signifying position as the center of the structuring element.
  • iterations: Number of times Closing is applied.
  • borderType: Type of border ( BORDER_CONSTANT, BORDER_REPLICATE, etc.)
  • borderValue: Border value
  • Return: Output Image (Mat Object)

The opening operator is given by the expression:

The expression represents that AoB is a subset (sub-image of A). The opening operator removes internal noise and thin protrusions present inside an image.

Below is the C++ program to demonstrate the Opening Morphological Operation:

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


Output:


My Personal Notes arrow_drop_up
Last Updated : 10 Feb, 2021
Like Article
Save Article
Similar Reads
Related Tutorials