⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 morphologicalprocessing.cpp

📁 matlab版图像数字处理这本书的配套代码
💻 CPP
字号:
#include"stdAfx.h"
#include"MorphologicalProcessing.h"

void MorphologicalOpen(LPSTR lpDIBBits,LONG width,LONG height)
{
	LPSTR lpDst;
	LONG LineBytes=(width*8+31)/32*4;
	LONG i,j,m,n;
	BYTE max,min;
	HLOCAL  hNewDIB=LocalAlloc(LHND,LineBytes*height);
	
	lpDst=(LPSTR)LocalLock(hNewDIB);
	memcpy(lpDst,lpDIBBits,LineBytes*height);
	int diameter,radius;
	diameter=30;
	radius=diameter/2;
		
		
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{	
			min=lpDIBBits[i*LineBytes+j];
			for(m=-radius;m<radius+1;m++)
				for(n=-radius;n<radius+1;n++)
				{
					if(m*m+n*n<=radius*radius)
					{
						if(i+m>-1&&i+m<height)
						{
							if(j+n>-1&&j+n<width)
							{
								if(min>lpDIBBits[(i+m)*LineBytes+(j+n)])
									min=lpDIBBits[(i+m)*LineBytes+(j+n)];
							}
						}
					}
				}
			lpDst[i*LineBytes+j]=min;
		}
	}
/*	for(i=0;i<height;i++)
	for(j=0;j<width;j++)
	lpDIBBits[i*LineBytes+j]=lpDst[i*LineBytes+j];
*/
	
	for(i=0;i<height;i++)
	for(j=0;j<width;j++)
	{	
		max=lpDst[i*LineBytes+j];
		for(m=-radius;m<radius+1;m++)
		for(n=-radius;n<radius+1;n++)
		{
			if(m*m+n*n<=radius*radius)
			{
			if(i+m>=0&&i+m<height)
				if(j+n>=0&&j+n<width)
				{
					if(max<lpDst[(i+m)*LineBytes+(j+n)])
					max=lpDst[(i+m)*LineBytes+(j+n)];
				}
			}
		}
		lpDIBBits[i*LineBytes+j]=max;
	}

}


void MorphologicalClose(LPSTR lpDIBBits,LONG width,LONG height)
{
	LPSTR lpDst;
	LONG LineBytes=(width*8+31)/32*4;
	LONG i,j,m,n;
	BYTE max,min;
	HLOCAL  hNewDIB=LocalAlloc(LHND,LineBytes*height);
	
	lpDst=(LPSTR)LocalLock(hNewDIB);
	memcpy(lpDst,lpDIBBits,LineBytes*height);
	int diameter,radius;
	diameter=50;
	radius=diameter/2;
	
		
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{	
			max=lpDIBBits[i*LineBytes+j];
			for(m=-radius;m<radius+1;m++)
				for(n=-radius;n<radius+1;n++)
				{
					if(m*m+n*n<=radius*radius)
					{
						if(i+m>=0&&i+m<height)
						{
							if(j+n>=0&&j+n<width)
							{
								if(max<lpDIBBits[(i+m)*LineBytes+(j+n)])
									max=lpDIBBits[(i+m)*LineBytes+(j+n)];
							}
						}
					}
				}
			lpDst[i*LineBytes+j]=max;
		}
	}
/*	for(i=0;i<height;i++)
	for(j=0;j<width;j++)
	lpDIBBits[i*LineBytes+j]=lpDst[i*LineBytes+j];
*/
	
	for(i=0;i<height;i++)
	for(j=0;j<width;j++)
	{	
		min=lpDst[i*LineBytes+j];
		for(m=-radius;m<radius+1;m++)
		for(n=-radius;n<radius+1;n++)
		{
			if(m*m+n*n<=radius*radius)
			{
			if(i+m>=0&&i+m<height)
				if(j+n>=0&&j+n<width)
				{
					if(min>lpDst[(i+m)*LineBytes+(j+n)])
					min=lpDst[(i+m)*LineBytes+(j+n)];
				}
			}
		}
		lpDIBBits[i*LineBytes+j]=min;
	}

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -