📄 imageprocessingview.cpp
字号:
*/
void CImageProcessingView::OnRegionGrow()
{
// TODO: Add your command handler code here
//更改光标形状
BeginWaitCursor();
// 获得Doc类的指
CImageProcessingDoc * pDoc = (CImageProcessingDoc *)this->GetDocument();
CDib * pDib = pDoc->m_pDibInit;
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 遍历图象的纵坐标
int y;
// 遍历图象的横坐标
int x;
// 图像在计算机在存储中的实际大小
CSize sizeImageSave = pDib->GetDibSaveDim();
// 图像在内存中每一行象素占用的实际空间
int nSaveWidth = sizeImageSave.cx;
// 图象的长宽大小
CSize sizeImage = pDib->GetDimensions();
int nWidth = sizeImage.cx ;
int nHeight = sizeImage.cy ;
// 指向图像数据的指针
LPBYTE lpImage ;
lpImage = pDib->m_lpImage ;
unsigned char * pUnchRgRst = new unsigned char[nWidth * nHeight];
// 初始化
memset(pUnchRgRst, 0 , sizeof(unsigned char)*nWidth*nHeight );
RegionGrow(pDib, pUnchRgRst);
for(y=0; y<nHeight; y++)
for(x=0; x<nWidth; x++)
{
lpImage[y*nSaveWidth + x] =(unsigned char) (255-pUnchRgRst[y*nWidth+x] );
}
// 释放内存
delete []pUnchRgRst;
pUnchRgRst = NULL ;
// 恢复光标形状
EndWaitCursor();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
/*************************************************************************
*
* \函数名称:
* OnMotionBackground()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 该函数根据运动图象提取其中的静止背景。其中运动图象要求为bmp文件,并按
*顺序排列。
*
*************************************************************************
*/
void CImageProcessingView::OnMotionBackground()
{
// 提取背景成功标志
BOOL bFlag;
// 获取文档指针
CImageProcessingDoc* pDoc;
pDoc = GetDocument();
// 获得当前打开文件的文件路径名
CString strPathName;
strPathName = pDoc->GetPathName();
// 序列的总帧数
int nTotalFrameNum = 20;
// 图象的宽度
int nImageWidth;
nImageWidth = pDoc->m_pDibInit->m_lpBMIH->biWidth;
// 图象的高度
int nImageHeight;
nImageHeight = pDoc->m_pDibInit->m_lpBMIH->biHeight;
// 图象的静止背景
unsigned char* pUnchBackGround;
pUnchBackGround = new unsigned char[nImageWidth*nImageHeight];
// 更改光标形状
BeginWaitCursor();
// 调用GetBackground函数提取静止背景
bFlag = GetBackground(strPathName, nTotalFrameNum, nImageWidth,nImageHeight, pUnchBackGround);
if(bFlag == FALSE){
return;
}
// 将背景设置为当前显示图象
LPBYTE lpTemp;
lpTemp = pDoc->m_pDibInit->m_lpImage;
// 将数据拷贝到图象中
memcpy(lpTemp, (LPBYTE)pUnchBackGround, nImageWidth*nImageHeight);
// 恢复光标形状
EndWaitCursor();
// 释放已分配内存
delete[]pUnchBackGround;
pUnchBackGround = NULL;
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
/*************************************************************************
*
* \函数名称:
* OnRecogMatch()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 根据图象模板,在待匹配的图象中找到匹配的位置
*
*************************************************************************
*/
void CImageProcessingView::OnRecogMatch()
{
CImageProcessingDoc* pDoc;
pDoc = GetDocument();
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的水平镜像,其它的可以类推)
if(pDoc->m_pDibInit->m_nColorTableEntries != 256)
{
// 提示用户
MessageBox("目前只支持256色位图的图象配准!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 打开图象识别对话框
CDlgRecMatch* pDlg = new CDlgRecMatch(NULL, pDoc);
pDlg->DoModal();
delete pDlg;
}
void CImageProcessingView::OnDegenerationInverse()
{
// 图象的模糊
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图象CDib类的指针
CDib * pDib = pDoc->m_pDibInit;
// 获得图象的头文件信息
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的图象模糊)
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象模糊!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
::DIBNoRestriction(pDib);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnRestoreInverse()
{
// 图象的逆滤波
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图象CDib类的指针
CDib * pDib = pDoc->m_pDibInit;
// 获得图象的头文件信息
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的逆滤波)
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的逆滤波!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
::DIBInverseFilter(pDib);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnDegenerationMotion()
{
// 图象的运动模糊
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图象CDib类的指针
CDib * pDib = pDoc->m_pDibInit;
// 获得图象的头文件信息
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的运动模糊)
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的运动模糊!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
::DIBMotionDegeneration(pDib);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnRestoreMotion()
{
// 运动模糊图象复原
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图象CDib类的指针
CDib * pDib = pDoc->m_pDibInit;
// 获得图象的头文件信息
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的运动模糊复原)
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的运动模糊复原!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
::DIBMotionRestore(pDib);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnDEGENERATIONWinner()
{
// 图象的加噪模糊
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图象CDib类的指针
CDib * pDib = pDoc->m_pDibInit;
// 获得图象的头文件信息
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的加噪模糊)
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的加噪模糊!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
::DIBNoiseDegeneration(pDib);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnRestoreWinner()
{
// 图象的维纳滤波
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图象CDib类的指针
CDib * pDib = pDoc->m_pDibInit;
// 获得图象的头文件信息
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的维纳滤波)
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的维纳滤波!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
::DIBWinnerFilter(pDib);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnMoment()
{
// 图象的pq阶力矩
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图象CDib类的指针
CDib * pDib = pDoc->m_pDibInit;
// 获得图象的头文件信息
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
::DIBMOMENT(pDib);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnBarycentermoment()
{
// 图象的重心矩
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图象CDib类的指针
CDib * pDib = pDoc->m_pDibInit;
// 获得图象的头文件信息
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
::DIBBARYCENTERMOMENT(pDib);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnAnalysisHolenum()
{
// 消去二值图象中小于阈值面积的区域
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图象CDib类的指针
CDib * pDib = pDoc->m_pDibInit;
// 获得图象的头文件信息
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
::DIBHOLENUMBER(pDib);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnStreetFramework()
{
// 街区距离骨架提取
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图象CDib类的指针
CDib * pDib = pDoc->m_pDibInit;
// 获得图象的头文件信息
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
::DIBFREAMEWORK(pDib);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnStreetTransform()
{
// 二值图象的街区距离变换
// 更改光标形状
BeginWaitCursor();
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 获得图
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -