目录

1--开操作

2--闭操作

3--基本梯度计算

4--顶帽操作

5--黑帽操作

6--代码实例

1--开操作

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

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

③ OpenCV API:

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 API:

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

3--基本梯度计算

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

② Opencv API:

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

4--顶帽操作

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

② Opencv API:

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

5--黑帽操作

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

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

}

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。