3. erode, dilate, morphologyEx

程式範例

腐蝕

#include <opencv2/opencv.hpp>  

using namespace cv;

int main(int argc, char** argv) 
{   
    Mat srcImage, dstImage;  
    int erosion_type = MORPH_RECT;
    int erosion_size = 3;
    Mat element = getStructuringElement(
        erosion_type, 
        Size(2 * erosion_size + 1, 2 * erosion_size + 1),
        Point(erosion_size, erosion_size));

    srcImage = imread("original_me.jpg", 1);  
    dstImage = imwrite("modify_me.jpg", 1);

    namedWindow("Display Image", WINDOW_NORMAL);  
    imshow("Original Image", srcImage); 

    erode(srcImage, dstImage, element);

    imshow("Modify Image", dstImage); 
    waitKey(0); 
     
    return 0;  
} 

膨脹

#include <opencv2/opencv.hpp>  

using namespace cv;

int main(int argc, char** argv) 
{   
    Mat srcImage, dstImage;  
    int dilation_size = MORPH_RECT;
    int dilation_type = 3;
    Mat element = getStructuringElement(
        dilation_type, 
        Size(2 * dilation_size + 1, 2 * dilation_size + 1),
        Point(dilation_size, dilation_size));

    srcImage = imread("original_me.jpg", 1);  
    dstImage = imwrite("modify_me.jpg", 1);

    namedWindow("Display Image", WINDOW_NORMAL);  
    imshow("Original Image", srcImage); 

    dilate(srcImage, dstImage, element);

    imshow("Modify Image", dstImage); 
    waitKey(0); 
     
    return 0;  
} 

開運算

#include <opencv2/opencv.hpp>  

using namespace cv;

int main(int argc, char** argv) 
{   
    Mat srcImage, dstImage;  
    int morph_size = 3;
    int morph_elem = MORPH_RECT;

    Mat element = getStructuringElement(
        morph_elem,
        Size(2 * morph_size + 1, 2 * morph_size + 1),
        Point(morph_size, morph_size));

    srcImage = imread("original_me.jpg", 1);  
    dstImage = imwrite("modify_me.jpg", 1);

    namedWindow("Display Image", WINDOW_NORMAL);  
    imshow("Original Image", srcImage); 

    morphologyEx(srcImage, dstImage, MORPH_OPEN, element);

    imshow("Modify Image", dstImage); 
    waitKey(0); 
     
    return 0;  
} 

閉運算

#include <opencv2/opencv.hpp>  

using namespace cv;

int main(int argc, char** argv) 
{   
    Mat srcImage, dstImage;  
    int morph_size = 3;
    int morph_elem = MORPH_RECT;

    Mat element = getStructuringElement(
        morph_elem,
        Size(2 * morph_size + 1, 2 * morph_size + 1),
        Point(morph_size, morph_size));

    srcImage = imread("original_me.jpg", 1);  
    dstImage = imwrite("modify_me.jpg", 1);

    namedWindow("Display Image", WINDOW_NORMAL);  
    imshow("Original Image", srcImage); 

    morphologyEx(srcImage, dstImage, MORPH_CLOSE, element);

    imshow("Modify Image", dstImage); 
    waitKey(0); 
     
    return 0;  
} 

形態學梯度

#include <opencv2/opencv.hpp>  

using namespace cv;

int main(int argc, char** argv) 
{   
    Mat srcImage, dstImage;  
    int morph_size = 3;
    int morph_elem = MORPH_RECT;

    Mat element = getStructuringElement(
        morph_elem,
        Size(2 * morph_size + 1, 2 * morph_size + 1),
        Point(morph_size, morph_size));

    srcImage = imread("original_me.jpg", 1);  
    dstImage = imwrite("modify_me.jpg", 1);

    namedWindow("Display Image", WINDOW_NORMAL);  
    imshow("Original Image", srcImage); 

    morphologyEx(srcImage, dstImage, MORPH_GRADIENT, element);

    imshow("Modify Image", dstImage); 
    waitKey(0); 
     
    return 0;  
} 

頂帽

#include <opencv2/opencv.hpp>  

using namespace cv;

int main(int argc, char** argv) 
{   
    Mat srcImage, dstImage;  
    int morph_size = 3;
    int morph_elem = MORPH_RECT;

    Mat element = getStructuringElement(
        morph_elem,
        Size(2 * morph_size + 1, 2 * morph_size + 1),
        Point(morph_size, morph_size));

    srcImage = imread("original_me.jpg", 1);  
    dstImage = imwrite("modify_me.jpg", 1);

    namedWindow("Display Image", WINDOW_NORMAL);  
    imshow("Original Image", srcImage); 

    morphologyEx(srcImage, dstImage, MORPH_TOPHAT, element);

    imshow("Modify Image", dstImage); 
    waitKey(0); 
     
    return 0;  
} 

黑帽

#include <opencv2/opencv.hpp>  

using namespace cv;

int main(int argc, char** argv) 
{   
    Mat srcImage, dstImage;  
    int morph_size = 3;
    int morph_elem = MORPH_RECT;

    Mat element = getStructuringElement(
        morph_elem,
        Size(2 * morph_size + 1, 2 * morph_size + 1),
        Point(morph_size, morph_size));

    srcImage = imread("original_me.jpg", 1);  
    dstImage = imwrite("modify_me.jpg", 1);

    namedWindow("Display Image", WINDOW_NORMAL);  
    imshow("Original Image", srcImage); 

    morphologyEx(srcImage, dstImage, MORPH_BLACKHAT, element);

    imshow("Modify Image", dstImage); 
    waitKey(0); 
     
    return 0;  
} 

Last updated

Was this helpful?