图像的腐蚀与膨胀,闭运算与开运算

1.腐蚀与膨胀

腐蚀:删除对象边界的某些像素,将图像的边缘腐蚀掉。作用就是将目标的边缘的“毛刺”踢除掉。

膨胀:为图像中的对象边界添加像素,将图像的边缘扩大些。作用就是将目标的边缘或者是内部的坑填掉。

腐蚀替换当前像素位像素集合中找到的最小像素值;

膨胀替换挡墙像素位像素集合中找到的最大像素值;

腐蚀和膨胀分别由函数cv::erode和cv::dilate实现;

    erode(src, dst, cv::Mat());

OpenCv默认使用3*3的方形结构元素,当第3个参数被设置为空矩阵(即cv::Mat())时,这个默认结构被使用。

你也可以这样使用

    cv::Mat element(7, 7, CV_8U, Scalar(1));
    erode(src, dst, element);


  对图像腐蚀3次,  erode(src, dst, cv::Mat(),Point(-1,-1),3);获得的图像与7*7结构元素的结果一样

//图像的腐蚀与膨胀
#include<opencv2\opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main()
{
	Mat src = imread("001.jpg");
	if(!src.data){ cout << "error"; exit(1); }
	Mat dst,dst2;
	//腐蚀图像
	erode(src, dst, cv::Mat());
	imshow("腐蚀", dst);

	//膨胀图像
	dilate(src, dst2, cv::Mat());
	imshow("膨胀", dst2);

	imshow("原图", src);
	waitKey(0);
	return 0;
}


结果如下:原图,腐蚀,膨胀


2.闭运算与开运算

此函数实现闭运算:cv::morphologyEx(src, closed, cv::MORPH_CLOSE, element5);

此函数实现开运算:cv::morphologyEx(src, opened, cv::MORPH_OPEN,element5);

闭运算定义为对图像先膨胀再腐蚀;

开运算定义为对图像先腐蚀再膨胀;

注意:对一幅图像多次使用相同的开运算(或闭运算)是没有效果的


//闭运算与开运算
#include<opencv2\opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main()
{
	Mat src = imread("001.jpg");
	if(!src.data){ cout << "error"; exit(1); }
	Mat closed,opened;
	cv::Mat element5(5, 5, CV_8U, Scalar(1));
	
	//闭运算
	cv::morphologyEx(src, closed, cv::MORPH_CLOSE, element5);

	imshow("闭运算", closed);

	//膨胀图像
	cv::morphologyEx(src, opened, cv::MORPH_OPEN,element5);
	imshow("开运算", opened);

	imshow("原图", src);
	waitKey(0);
	return 0;
}


由结果看到:闭运算将白色前景物体中的小洞填充,开运算移除的是场景中比较小的物体。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值