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

📄 morphproc.cpp

📁 用C++实现的数字图像处理各个算法源代码 我精心整理的 很难的啊 希望可以给大家带来帮助
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// MorphProc.cpp: implementation of the CMorphPro class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MorphProc.h"

IMPLEMENT_DYNCREATE(CMorphPro, CObject)

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//Diagnostics and dump member functions, overridden
#ifdef _DEBUG
void CMorphPro::Dump(CDumpContext &dc) const
{
	//call base class function first
	CObject::Dump(dc);
}
#endif

#ifdef _DEBUG
void CMorphPro::AssertValid() const
{
	//call inherited AssertValid first
	CObject::AssertValid();
	//Check CDibObject members...
	ASSERT(m_pDibObject != NULL);	//Must exist
}
#endif

/************************************************************************
*                                                                       *
*                           数学形态学处理类                            *
*                                                                       *
*注意:在数学形态学类中,为处理方便要求的CDibObject图像仍为256色灰度图*
*	   像不过在处理中只用到其调色板中的0和255两个值。                   *
************************************************************************/

////////////////////////////////////////////////////////////////////////
//构造函数CMorphPro()    
//----------------------------------------------------------------------
//基本功能:构造一个CMorphPro类的对象,如不传入CDibObject对象。第一次调   
//			用某一个处理函数时必须给出一个CDibObject对象指针。
//----------------------------------------------------------------------
//参数说明:无
//----------------------------------------------------------------------
//返    回:无
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
CMorphPro::CMorphPro()
{

}

////////////////////////////////////////////////////////////////////////
//构造函数CMorphPro()    
//----------------------------------------------------------------------
//基本功能:构造一个CMorphPro类的对象并传入CDibObject对象。所有的操作都
//			针对该对象,直到另一个对象作为参数被传给图像处理函数。
//----------------------------------------------------------------------
//参数说明:CDibObject *pDibObject
//----------------------------------------------------------------------
//返    回:无
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
CMorphPro::CMorphPro(CDibObject *pDibObject)
{
	m_pDibObject = pDibObject;
}

//析构函数
CMorphPro::~CMorphPro()
{

}

////////////////////////////////////////////////////////////////////////
//void SetDibObjectClass(CDibObject *pDibObject)   
//----------------------------------------------------------------------
//基本功能:本函数为CMorphPro类对象指定一个CDibObject对象指针
//----------------------------------------------------------------------
//参数说明:CDibObject *pDibObject, 默认为NULL。
//----------------------------------------------------------------------
//返    回:无。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
void CMorphPro::SetDibObjectClass(CDibObject *pDibObject)
{
	m_pDibObject = pDibObject;
}

/************************************************************************
*                                                                       *
*            以下函数完成数据区反相、与、或、异或等操作                 *
*	                                                                    *
************************************************************************/

////////////////////////////////////////////////////////////////////////
//BOOL IsResultBlank()   
//----------------------------------------------------------------------
//基本功能:本函数判断图像数据是否全为零
//----------------------------------------------------------------------
//参数说明:unsigned char *pIn		指向图像数据的指针
//			LONG lSize				图像数据的大小(nWidthBytes*nHeight)
//----------------------------------------------------------------------
//返    回:BOOL
//			不为零时返回TRUE,为零时返回FALSE。
//----------------------------------------------------------------------
//注    意:此函数声明为保护型,只能在CMorphPro类中使用。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CMorphPro::IsResultBlank(unsigned char *pIn, LONG lSize)
{
	BOOL bMark = TRUE;
	LONG i;
	for(i = 0; i < lSize; i++)
	{
		if(*(pIn + i) != 0x00)
		{
			i = lSize;
			bMark = FALSE;
		}
	}
	return(bMark);
}

////////////////////////////////////////////////////////////////////////
//void ReverseBuffer()   
//----------------------------------------------------------------------
//基本功能:本函数判断图像数据进行反相操作
//----------------------------------------------------------------------
//参数说明:unsigned char *pIn		指向图像数据的指针
//			LONG lSize				图像数据的大小(nWidthBytes*nHeight)
//----------------------------------------------------------------------
//返    回:无
//----------------------------------------------------------------------
//注    意:此函数声明为保护型,只能在CMorphPro类中使用。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
void CMorphPro::ReverseBuffer(unsigned char *pIn, LONG lSize)
{
	LONG i;
	BYTE  Buffer;
	for(i = 0;i < lSize; i++)
	{
		Buffer = *(pIn + i);
		//进行反相运算
		*(pIn + i) = (BYTE)(255 - Buffer);
	}
}

////////////////////////////////////////////////////////////////////////
//void AndBuffer()   
//----------------------------------------------------------------------
//基本功能:本函数对传入的两幅图像数据进行与操作
//----------------------------------------------------------------------
//参数说明:unsigned char *pOut		指向输出图像数据的指针
//			unsigned char *pIn		指向输入图像数据的指针
//			LONG lSize				图像数据的大小(nWidthBytes*nHeight)
//----------------------------------------------------------------------
//返    回:无
//----------------------------------------------------------------------
//注    意:此函数声明为保护型,只能在CMorphPro类中使用。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
void CMorphPro::AndBuffer(unsigned char *pOut, unsigned char *pIn,
						   LONG lSize)
{
	LONG i;
	BYTE Buffer;
	for(i = 0; i < lSize; i++)
	{
		Buffer = *(pIn + i);
		//执行与操作
		*(pOut + i) &= Buffer;
	}
}

////////////////////////////////////////////////////////////////////////
//void OrBuffer()   
//----------------------------------------------------------------------
//基本功能:本函数对传入的两幅图像数据进行或操作
//----------------------------------------------------------------------
//参数说明:unsigned char *pOut		指向输出图像数据的指针
//			unsigned char *pIn		指向输入图像数据的指针
//			LONG lSize				图像数据的大小(nWidthBytes*nHeight)
//----------------------------------------------------------------------
//返    回:无
//----------------------------------------------------------------------
//注    意:此函数声明为保护型,只能在CMorphPro类中使用。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
void CMorphPro::OrBuffer(unsigned char *pOut, unsigned char *pIn, 
						  LONG lSize)
{
	LONG i;
	BYTE Buffer;
	for(i = 0; i < lSize; i++)
	{
		Buffer = *(pIn + i);
		//执行或操作
		*(pOut + i) |= Buffer;
	}
}

////////////////////////////////////////////////////////////////////////
//void XorBuffer()   
//----------------------------------------------------------------------
//基本功能:本函数对传入的两幅图像数据进行异或操作
//----------------------------------------------------------------------
//参数说明:unsigned char *pOut		指向输出图像数据的指针
//			unsigned char *pIn		指向输入图像数据的指针
//			LONG lSize				图像数据的大小(nWidthBytes*nHeight)
//----------------------------------------------------------------------
//返    回:无
//----------------------------------------------------------------------
//注    意:此函数声明为保护型,只能在CMorphPro类中使用。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
void CMorphPro::XorBuffer(unsigned char *pOut, unsigned char *pIn, 
						   LONG lSize)
{
	LONG i;
	BYTE Buffer;
	for(i = 0; i < lSize; i++)
	{
		Buffer = *(pIn + i);
		//执行异或操作
		*(pOut + i) ^= Buffer;
	}
}

////////////////////////////////////////////////////////////////////////
//void CopyBuffer()   
//----------------------------------------------------------------------
//基本功能:本函数对传入的两幅图像数据进行复制操作
//----------------------------------------------------------------------
//参数说明:unsigned char *pOut		指向输出图像数据的指针
//			unsigned char *pIn		指向输入图像数据的指针
//			LONG lSize				图像数据的大小(nWidthBytes*nHeight)
//----------------------------------------------------------------------
//返    回:无
//----------------------------------------------------------------------
//注    意:此函数声明为保护型,只能在CMorphPro类中使用。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
void CMorphPro::CopyBuffer(unsigned char *pOut, unsigned char *pIn,
							LONG lSize)
{
	if(pOut == NULL || pIn == NULL)
	{
		AfxMessageBox("传入的数据绶冲区指针为空!");
		return;
	}
	//用pIn中的数据填充pOut
	memcpy(pOut, pIn, lSize);
}

////////////////////////////////////////////////////////////////////////
//void MoveBuffer()   
//----------------------------------------------------------------------
//基本功能:本函数对传入的两幅图像数据进行移动操作
//----------------------------------------------------------------------
//参数说明:unsigned char *pOut		指向输出图像数据的指针
//			unsigned char *pIn		指向输入图像数据的指针
//			LONG lSize				图像数据的大小(nWidthBytes*nHeight)
//----------------------------------------------------------------------
//返    回:无
//----------------------------------------------------------------------
//注    意:此函数声明为保护型,只能在CMorphPro类中使用。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
void CMorphPro::MoveBuffer(unsigned char *pOut, unsigned char *pIn, 
							LONG lSize)
{
	if(pOut == NULL || pIn == NULL)
	{
		AfxMessageBox("传入的数据绶冲区指针为空!");
		return;
	}

	//用pIn中的数据填充pOut
	memcpy(pOut, pIn, lSize);
	//将pIn中的数据置0
	memset(pIn, 0x00, lSize);
}

////////////////////////////////////////////////////////////////////////
//void CleanBuffer()   
//----------------------------------------------------------------------
//基本功能:本函数对传入的两幅图像数据进行清除操作
//----------------------------------------------------------------------
//参数说明:unsigned char *pIn		指向图像数据的指针
//			LONG lSize				图像数据的大小(nWidthBytes*nHeight)
//----------------------------------------------------------------------
//返    回:无
//----------------------------------------------------------------------
//注    意:此函数声明为保护型,只能在CMorphPro类中使用。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
void CMorphPro::CleanBuffer(unsigned char *pIn, LONG lSize)
{
	if(pIn == NULL)
	{
		AfxMessageBox("传入的数据绶冲区指针为空!");
		return;
	}

	//将pIn中的数据置0
	memset(pIn, 0x00, lSize);
}

////////////////////////////////////////////////////////////////////////
//unsigned char GetBitsPoint()   
//----------------------------------------------------------------------
//基本功能:本函数获取传入的pDibObject指定的CMorphPro类的图像对象的数
//			据区的指针。
//----------------------------------------------------------------------
//参数说明:无
//----------------------------------------------------------------------
//返    回:unsigned char
//          返回图像数据区的指针。
//----------------------------------------------------------------------
//注    意:此函数声明为保护型,只能在CMorphPro类中使用。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
unsigned char *CMorphPro::GetBitsPoint()
{
	//图像指针为空
	if(m_pDibObject == NULL) return(NULL);
		
	//定义变量
	unsigned char *pBuffer, *pBits; 
	int nWidthBytes;
	int nNumColors = m_pDibObject->GetNumColors();

	//原图像指针
	pBuffer = (unsigned char *) m_pDibObject->GetDIBPointer( &nWidthBytes, 
											m_pDibObject->GetNumBits() );
	if( pBuffer == NULL )
	{
		return(NULL);
	}

	//图像数据指针
	pBits = (unsigned char *) &pBuffer[sizeof(BITMAPFILEHEADER)+
								sizeof(BITMAPINFOHEADER)+
								nNumColors*sizeof(RGBQUAD)];
	//返回图像数据指针
	return( pBits );
}

////////////////////////////////////////////////////////////////////////
//BOOL MakeErosion()   
//----------------------------------------------------------------------
//基本功能:本函数对图像数据执行腐蚀操作。

⌨️ 快捷键说明

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