📄 demoview.cpp
字号:
::MessageBox(0,"只处理灰度图像",MB_OK,0);
return ;
}
//定义形态学类的对象morph,并用当前DIB为其初始化
Morphology morph(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//形态学模板选择对话框
MaskDefineDlg dlgPara;
//缺省的结构元素模板
int i,j;
for(i=1;i<4;i++){
for(j=1;j<4;j++){
dlgPara.m_defineMask[i*5+j]=1;
}
}
if(dlgPara.DoModal()==IDOK){
//输入模板
morph.InputMask(dlgPara.m_defineMask,5,5);
//灰值腐蚀
morph.GrayErosion();
//新建视图,显示处理结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
ImgCenterDib *dibNew=pDocNew->GetPDib();
dibNew->ReplaceDib(morph.GetDimensions(),morph.m_nBitCountOut,morph.m_lpColorTableOut, morph.m_pImgDataOut);
pView->OnInitialUpdate();
pDocNew->SetModifiedFlag(TRUE);
pDocNew->UpdateAllViews(pView);
}
}
void CDemoView::OnDilationForGray()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理灰度图像
if(pDib->m_nBitCount!=8){
::MessageBox(0,"只处理灰度图像",MB_OK,0);
return ;
}
//定义形态学类的对象morph,并用当前DIB为其初始化
Morphology morph(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//形态学模板选择对话框
MaskDefineDlg dlgPara;
//缺省的结构元素模板
dlgPara.m_defineMask[7]=1;
dlgPara.m_defineMask[11]=1;
dlgPara.m_defineMask[12]=1;
dlgPara.m_defineMask[13]=1;
dlgPara.m_defineMask[17]=1;
if(dlgPara.DoModal()==IDOK){
//输入模板
morph.InputMask(dlgPara.m_defineMask,5,5);
//灰值膨胀
morph.GrayDilation();
//新建视图,显示处理结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
ImgCenterDib *dibNew=pDocNew->GetPDib();
dibNew->ReplaceDib(morph.GetDimensions(),morph.m_nBitCountOut,morph.m_lpColorTableOut, morph.m_pImgDataOut);
pView->OnInitialUpdate();
pDocNew->SetModifiedFlag(TRUE);
pDocNew->UpdateAllViews(pView);
}
}
void CDemoView::OnOpenForGray()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理灰度图像
if(pDib->m_nBitCount!=8){
::MessageBox(0,"只处理灰度图像",MB_OK,0);
return ;
}
//定义形态学类的对象morph,并用当前DIB为其初始化
Morphology morph(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//形态学模板选择对话框
MaskDefineDlg dlgPara;
//缺省的结构元素模板
dlgPara.m_defineMask[7]=1;
dlgPara.m_defineMask[11]=1;
dlgPara.m_defineMask[12]=1;
dlgPara.m_defineMask[13]=1;
dlgPara.m_defineMask[17]=1;
if(dlgPara.DoModal()==IDOK){
//输入模板
morph.InputMask(dlgPara.m_defineMask,5,5);
//灰值开
morph.GrayOpen();
//新建视图,显示处理结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
ImgCenterDib *dibNew=pDocNew->GetPDib();
dibNew->ReplaceDib(morph.GetDimensions(),morph.m_nBitCountOut,morph.m_lpColorTableOut, morph.m_pImgDataOut);
pView->OnInitialUpdate();
pDocNew->SetModifiedFlag(TRUE);
pDocNew->UpdateAllViews(pView);
}
}
void CDemoView::OnCloseForGray()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理灰度图像
if(pDib->m_nBitCount!=8){
::MessageBox(0,"只处理灰度图像",MB_OK,0);
return ;
}
//定义形态学类的对象morph,并用当前DIB为其初始化
Morphology morph(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//形态学模板选择对话框
MaskDefineDlg dlgPara;
//缺省的结构元素模板
dlgPara.m_defineMask[7]=1;
dlgPara.m_defineMask[11]=1;
dlgPara.m_defineMask[12]=1;
dlgPara.m_defineMask[13]=1;
dlgPara.m_defineMask[17]=1;
if(dlgPara.DoModal()==IDOK){
//输入模板
morph.InputMask(dlgPara.m_defineMask,5,5);
//灰值闭
morph.GrayClose();
//新建视图,显示处理结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
ImgCenterDib *dibNew=pDocNew->GetPDib();
dibNew->ReplaceDib(morph.GetDimensions(),morph.m_nBitCountOut,morph.m_lpColorTableOut, morph.m_pImgDataOut);
pView->OnInitialUpdate();
pDocNew->SetModifiedFlag(TRUE);
pDocNew->UpdateAllViews(pView);
}
}
void CDemoView::OnMorphoGradientForGray()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理灰度图像
if(pDib->m_nBitCount!=8){
::MessageBox(0,"只处理灰度图像",MB_OK,0);
return ;
}
//定义形态学类的对象morph,并用当前DIB为其初始化
Morphology morph(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//形态学模板选择对话框
MaskDefineDlg dlgPara;
//缺省的结构元素模板
dlgPara.m_defineMask[7]=1;
dlgPara.m_defineMask[11]=1;
dlgPara.m_defineMask[12]=1;
dlgPara.m_defineMask[13]=1;
dlgPara.m_defineMask[17]=1;
if(dlgPara.DoModal()==IDOK){
//输入模板
morph.InputMask(dlgPara.m_defineMask,5,5);
//灰值形态学梯度
morph.GrayGradient();
//新建视图,显示处理结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
ImgCenterDib *dibNew=pDocNew->GetPDib();
dibNew->ReplaceDib(morph.GetDimensions(),morph.m_nBitCountOut,morph.m_lpColorTableOut, morph.m_pImgDataOut);
pView->OnInitialUpdate();
pDocNew->SetModifiedFlag(TRUE);
pDocNew->UpdateAllViews(pView);
}
}
void CDemoView::OnTopHatPeak()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理灰度图像
if(pDib->m_nBitCount!=8){
::MessageBox(0,"只处理灰度图像",MB_OK,0);
return ;
}
//定义形态学类的对象morph,并用当前DIB为其初始化
Morphology morph(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//形态学模板选择对话框
MaskDefineDlg dlgPara;
//缺省的结构元素模板
dlgPara.m_defineMask[7]=1;
dlgPara.m_defineMask[11]=1;
dlgPara.m_defineMask[12]=1;
dlgPara.m_defineMask[13]=1;
dlgPara.m_defineMask[17]=1;
if(dlgPara.DoModal()==IDOK){
//输入模板
morph.InputMask(dlgPara.m_defineMask,5,5);
//波峰检测
morph.GrayTopHatPeak();
//新建视图,显示处理结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
ImgCenterDib *dibNew=pDocNew->GetPDib();
dibNew->ReplaceDib(morph.GetDimensions(),morph.m_nBitCountOut,morph.m_lpColorTableOut, morph.m_pImgDataOut);
pView->OnInitialUpdate();
pDocNew->SetModifiedFlag(TRUE);
pDocNew->UpdateAllViews(pView);
}
}
void CDemoView::OnTopHatVally()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理灰度图像
if(pDib->m_nBitCount!=8){
::MessageBox(0,"只处理灰度图像",MB_OK,0);
return ;
}
//定义形态学类的对象morph,并用当前DIB为其初始化
Morphology morph(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//形态学模板选择对话框
MaskDefineDlg dlgPara;
//缺省的结构元素模板
dlgPara.m_defineMask[7]=1;
dlgPara.m_defineMask[11]=1;
dlgPara.m_defineMask[12]=1;
dlgPara.m_defineMask[13]=1;
dlgPara.m_defineMask[17]=1;
if(dlgPara.DoModal()==IDOK){
//输入模板
morph.InputMask(dlgPara.m_defineMask,5,5);
//波谷检测
morph.GrayTopHatVally();
//新建视图,显示处理结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
ImgCenterDib *dibNew=pDocNew->GetPDib();
dibNew->ReplaceDib(morph.GetDimensions(),morph.m_nBitCountOut,morph.m_lpColorTableOut, morph.m_pImgDataOut);
pView->OnInitialUpdate();
pDocNew->SetModifiedFlag(TRUE);
pDocNew->UpdateAllViews(pView);
}
}
void CDemoView::OnTopHatPeakAndVally()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理灰度图像
if(pDib->m_nBitCount!=8){
::MessageBox(0,"只处理灰度图像",MB_OK,0);
return ;
}
//定义形态学类的对象morph,并用当前DIB为其初始化
Morphology morph(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//形态学模板选择对话框
MaskDefineDlg dlgPara;
//缺省的结构元素模板
dlgPara.m_defineMask[7]=1;
dlgPara.m_defineMask[11]=1;
dlgPara.m_defineMask[12]=1;
dlgPara.m_defineMask[13]=1;
dlgPara.m_defineMask[17]=1;
if(dlgPara.DoModal()==IDOK){
//输入模板
morph.InputMask(dlgPara.m_defineMask,5,5);
//峰谷检测
morph.GrayTopHatPeakVally();
//新建视图,显示处理结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
ImgCenterDib *dibNew=pDocNew->GetPDib();
dibNew->ReplaceDib(morph.GetDimensions(),morph.m_nBitCountOut,morph.m_lpColorTableOut, morph.m_pImgDataOut);
pView->OnInitialUpdate();
pDocNew->SetModifiedFlag(TRUE);
pDocNew->UpdateAllViews(pView);
}
}
void CDemoView::OnInteractiveThresh()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理灰度和彩色图像
if(pDib->m_nBitCount!=8&&pDib->m_nBitCount!=24){
::MessageBox(0,"只处理灰度和彩色图像",MB_OK,0);
return ;
}
//阈值分割对话框类对象threshDlg
ThreshSegmentDlg threshDlg;
//用当前DIB数据替换threshDlg中成员m_histogramDib的原始数据
threshDlg.m_histogramDib.ReplaceDib(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
if(threshDlg.DoModal()==IDOK)
{
//定义灰度变换类的对象graytrans,并将当前DIB数据作为输入数据传入graytrans中
GrayTrans graytrans(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//根据用户选择的阈值,调用二值化函数分割图像
graytrans.Binary(threshDlg.m_threshSelect);
//新建视图,显示分割结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
ImgCenterDib *dibNew=pDocNew->GetPDib();
dibNew->ReplaceDib(graytrans.GetDimensions(),graytrans.m_nBitCountOut,graytrans.m_lpColorTableOut, graytrans.m_pImgDataOut);
pView->OnInitialUpdate();
pDocNew->SetModifiedFlag(TRUE);
pDocNew->UpdateAllViews(pView);
}
}
void CDemoView::OnOtusThreshold()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理灰度和彩色图像
if(pDib->m_nBitCount!=8&&pDib->m_nBitCount!=24){
::MessageBox(0,"只处理灰度和彩色图像",MB_OK,0);
return ;
}
//用直方图类对象来统计直方图
//定义直方图类的对象hist,并利用当前DIB数据对hist初始化
Histogram hist(pDib->GetDimens
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -