📄 morphproc.cpp
字号:
// 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 + -