Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作

目录

1--开操作

2--闭操作

3--基本梯度计算

4--顶帽操作

5--黑帽操作

6--代码实例


1--开操作

① 原理:先进行腐蚀操作,再进行膨胀操作;

② 作用:消除值高于邻近点的孤立点,达到去除图像中噪声的作用(假定对象是前景色、背景是黑色);消除较小的连通域,保留较大的连通域;断开较窄的狭颈,可以在两个物体纤细的连接处将它们分离;不明显改变较大连通域的面积的情况下平滑连通域的连界、轮廓;

Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作_第1张图片

③ OpenCV API:

Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作_第2张图片

cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(30, 30), cv::Point(-1, -1));
    
cv::morphologyEx(src, dst, cv::MORPH_OPEN, kernel); 

2--闭操作

① 原理:先进行膨胀操作,再进行腐蚀操作;

② 作用:消除值低于邻近点的孤立点,达到去除图像中噪声的作用(假定对象是前景色、背景是黑色);连接两个邻近的连通域;弥合较窄的间断和细长的沟壑;去除连通域内的小型空洞;能够平滑物体的轮廓;

Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作_第3张图片

③ OpenCV API:

Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作_第4张图片

cv::morphologyEx(src, dst, cv::MORPH_CLOSE, kernel); 

3--基本梯度计算

① 原理:膨胀后的图像减去腐蚀后的图像;

② Opencv API:

Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作_第5张图片

cv::morphologyEx(src, dst, cv::MORPH_GRADIENT, kernel);

4--顶帽操作

① 原理:计算原图像和开运算图像的差值图像;

Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作_第6张图片

② Opencv API:

cv::morphologyEx(src, dst, cv::MORPH_TOPHAT, kernel);

5--黑帽操作

① 原理:计算闭运算操作的图像与原图像的差距;

Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作_第7张图片

② Opencv API:

cv::morphologyEx(src, dst, cv::MORPH_BLACKHAT, kernel);

6--代码实例

#include 
# include

int main(int argc, char** argv){
    cv::Mat src;
    src = cv::imread("C:/Users/Liujinfu/Desktop/opencv_bilibili/test1.jpg");
    if (src.empty()){
        printf("could not load image..\n");
        return -1;
    }
    cv::imshow("input", src);

    cv::Mat dst;
    cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3), cv::Point(-1, -1));
    // 开操作,先腐蚀后膨胀
    //cv::morphologyEx(src, dst, cv::MORPH_OPEN, kernel); 

    // 闭操作,先膨胀后腐蚀
    //cv::morphologyEx(src, dst, cv::MORPH_CLOSE, kernel); 

    // 形态学梯度:膨胀减去腐蚀(基本梯度)
    cv::morphologyEx(src, dst, cv::MORPH_GRADIENT, kernel);
    
    // 顶帽:计算原图像与开图像的差值
    //cv::morphologyEx(src, dst, cv::MORPH_TOPHAT, kernel);

    // 黑帽:计算闭图像与原图像的差值
    //cv::morphologyEx(src, dst, cv::MORPH_BLACKHAT, kernel);

    cv::imshow("output", dst);
    cv::waitKey(0);
    return 0;
}

你可能感兴趣的:(Opencv(C++)学习笔记,opencv,计算机视觉,人工智能)