腐蚀和膨胀

本文详细解析了图像处理中的两种基本形态学操作——腐蚀和膨胀的原理及应用。通过实例说明如何对二值图像进行腐蚀和膨胀处理,以实现图像特征的增强或消除噪声。介绍了腐蚀操作如何通过特定的‘卷积’规则来细化图像边界,而膨胀操作则是扩大图像中的前景区域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

形态学操作中,腐蚀和膨胀原理很简单常用语二值图像,可以看做一种广义的‘’卷积‘’操作。

腐蚀(腐蚀黑色像素为例):

一副二值图像,遍历窗口和卷积核‘’卷积‘’所得值为图像再赋值,其中的‘’卷积‘’规则为遍历窗口各个位置上的黑色像素排布至少有卷积核黑色像素排布则卷积值即窗口中心重新赋值为黑,否则为白。遍历窗口移动直至整副图像遍历完成,卷积值组成的图像就是腐蚀处理之后的图像。(所谓A黑色素排布中至少有B黑色素排布是说:A中任意一个是黑的位置,则B中对该位置也为黑)

膨胀(膨胀黑色像素为例):

一副二值图像,遍历窗口和卷积核‘’卷积‘’所得值为图像再赋值,其中的‘’卷积‘’规则为如果遍历窗口中心位置上的像素和卷积核中心位置处值为同值则卷积核中所有黑色位置对应遍历窗口相应位置重新赋值为黑色。遍历窗口移动直至整副图像遍历完成。

一副正常的图片转化为二值图片后进行腐蚀:

void test_etch()
{
	Mat src = imread("d:/2.jpg", 0);
	Mat dst(src.rows, src.cols, CV_8UC1);
	Mat value2(src.rows, src.cols, CV_8UC1);
	for (int i = 0; i < src.rows; i++)
	{
		uchar* s= src.ptr<uchar>(i);
		uchar* v = value2.ptr<uchar>(i);
		for (int j = 0; j < src.cols; j++)
		{
			v[j]=s[j]>70?0:255;
		}
	}
	imshow("二值化图片", value2);



	for (int i = 1; i < src.rows - 1; i++)
	{
		uchar* src_prev = src.ptr<uchar>(i - 1);
		uchar* src_cur = src.ptr<uchar>(i);
		uchar* src_next = src.ptr<uchar>(i + 1);

		uchar* dst_cur = dst.ptr<uchar>(i);
		for (int j = 1; j < src.cols - 1; j++)
		{
			bool rel = src_prev[j] > 70 && src_cur[j] > 70 && src_cur[j - 1] > 70 && src_cur[j + 1] > 70 && src_next[j] > 70;
			if (!rel)//上下左右四像素全为黑该像素才可为黑
				dst_cur[j] = 255;
			else dst_cur[j] = 0;
		}
	}


	imshow("腐蚀黑色区域之后", dst);
	waitKey();

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值