本文实现二值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