C++——bmp二值图像的腐蚀、膨胀、开运算、闭运算

本文详细介绍了如何使用C++进行二值bmp图像的腐蚀、膨胀、开运算和闭运算。通过结构元素进行图像处理,解释了腐蚀是结构元素中心平移后仍包含在图像内的过程,而膨胀则是腐蚀的逆运算。开运算为先腐蚀后膨胀,闭运算则为先膨胀后腐蚀。文中提供了具体的运算过程和示例图像处理结果。
摘要由CSDN通过智能技术生成

本文实现二值bmp图像的腐蚀、膨胀及开运算、闭运算操作。本文使用白色为前景、黑色为背景的二值图进行操作:

1、腐蚀

腐蚀操作是结构原中心在被腐蚀图像中平移填充的过程。图像A被结构元B腐蚀,用集合论来表示如下式:

                                                              

其中x是平移量,上式表示腐蚀结果集合中的元素是结构元的中心平移x后仍然包含在集合A内,还可用E(A,B)表示腐蚀。

作图像腐蚀处理时,如果结构元素中的所有白色点与它对应的大图像素点完全相同,该点为白色,否则为黑色。

#include <cstring>
#include <windows.h>
#include"readbmp.h"
#include"savebmp.h"

//--------------------腐蚀操作-------------------------------------------//
void img_erosion(int *TempBuf, int TempH, int TempW)
{

	char readPath[] = "D:\\C++_file\\image_deal_C++\\image_morphology\\photo\\lunpan.bmp";
	readBmp(readPath);


	unsigned char *pGrayData;
	//因为转换后多了个颜色表,所以要改变
	bfoffbits += (sizeof(RGBQUAD) * 256);
	//biSizeImg存储的为位图数据占用的字节数,转换为灰度图像后值发生改变,  
	//因为24为真彩色位图数据的一个像素用3各字节表示,灰度图像为1个字节  
	biBitCount = 8;
	int lineBytes = (bmpWidth * biBitCount / 8 + 3) / 4 * 4;
	int oldLineBytes = (bmpWidth * 24 / 8 + 3) / 4 * 4;;
	pGrayData = new unsigned char[lineBytes * bmpHeight];
	//memset(pGrayData, 0, bmpInfoHeader.biSizeImage);

	//-------------------------------定义灰度图像的颜色表--------------------//  

	pColorTable = new RGBQUAD[256];
	for (int i = 0; i < 256; i++)
	{
		(*(pColorTable + i)).rgbBlue = i;
		(*(pColorTable + i)).rgbGreen = i;
		(*(pColorTable + i)).rgbRed = i;
		(*(pCo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值