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

📄 demoview.cpp

📁 visual c++图像处理经典算法示例程序 把功能都集中在一个程序中
💻 CPP
📖 第 1 页 / 共 4 页
字号:
					defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
					defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
					defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
					defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
				for(int i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int i, count=0;
		for(i=0;i<25;i++){
			if(mask[i]==1)
				count++;
		}
		if(count==0)
			{
				::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
				return;
			}
		
	unsigned char *lpOut=new unsigned char [height*lineByte];
  GrayDilation((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
	
	::memcpy(lpIn,lpOut,height*lineByte);

	::GlobalUnlock(dib);
  delete []lpOut;
//	pDoc->SetModifiedFlag(TRUE);
	Invalidate();
}

void CDemoView::OnGrayOpen() 
{
	CDemoDoc *pDoc=GetDocument();
	HDIB dib=pDoc->GetHDIB();
	if(dib==NULL) 
	{
		::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
		return;
	}

	LPSTR	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
	LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
	int width=phead->biWidth;
	int height=phead->biHeight;
	int biBitCount = phead->biBitCount/8;
	if(biBitCount==3)//不处理彩色图像
	{
		::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
		::GlobalUnlock(dib); 
		return;
	}
	int lineByte=(width * biBitCount+3)/4*4;
	unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);

	morphologyDlg dlg;
	
	if(dlg.DoModal()!=IDOK){
		::GlobalUnlock(dib);
		return;
	}
  int mask[25]={0}, maskSize=5;
		if(dlg.m_maskSelect==0){
			mask[6]=1, mask[7]=1, mask[8]=1;
			mask[11]=1, mask[12]=1, mask[13]=1;
			mask[16]=1, mask[17]=1, mask[18]=1;
		}
		else{
			DefineMaskDlg defDlg;
			if(defDlg.DoModal()==IDOK){
				int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
					defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
					defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
					defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
					defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
				for(int i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int i, count=0;
		for(i=0;i<25;i++){
			if(mask[i]==1)
				count++;
		}
		if(count==0)
			{
				::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
				return;
			}
		
	unsigned char *lpOut=new unsigned char [height*lineByte];
  GrayErosion((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
	GrayDilation((LPBYTE)lpOut,(LPBYTE)lpIn,width,height,mask);

	::GlobalUnlock(dib);
  delete []lpOut;
//	pDoc->SetModifiedFlag(TRUE);
	Invalidate();
}

void CDemoView::OnGreyClose() 
{
	CDemoDoc *pDoc=GetDocument();
	HDIB dib=pDoc->GetHDIB();
	if(dib==NULL) 
	{
		::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
		return;
	}

	LPSTR	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
	LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
	int width=phead->biWidth;
	int height=phead->biHeight;
	int biBitCount = phead->biBitCount/8;
	if(biBitCount==3)//不处理彩色图像
	{
		::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
		::GlobalUnlock(dib); 
		return;
	}
	int lineByte=(width * biBitCount+3)/4*4;
	unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);

	morphologyDlg dlg;
	
	if(dlg.DoModal()!=IDOK){
		::GlobalUnlock(dib);
		return;
	}
  int mask[25]={0}, maskSize=5;
		if(dlg.m_maskSelect==0){
			mask[6]=1, mask[7]=1, mask[8]=1;
			mask[11]=1, mask[12]=1, mask[13]=1;
			mask[16]=1, mask[17]=1, mask[18]=1;
		}
		else{
			DefineMaskDlg defDlg;
			if(defDlg.DoModal()==IDOK){
				int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
					defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
					defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
					defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
					defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
				for(int i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int i, count=0;
		for(i=0;i<25;i++){
			if(mask[i]==1)
				count++;
		}
		if(count==0)
			{
				::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
				return;
			}
		
	unsigned char *lpOut=new unsigned char [height*lineByte];
  GrayDilation((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
	GrayErosion((LPBYTE)lpOut,(LPBYTE)lpIn,width,height,mask);
	
	::GlobalUnlock(dib);
  delete []lpOut;
//	pDoc->SetModifiedFlag(TRUE);
	Invalidate();
}

void CDemoView::OnMorphologyGrad() 
{
	CDemoDoc *pDoc=GetDocument();
	HDIB dib=pDoc->GetHDIB();
	if(dib==NULL) 
	{
		::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
		return;
	}

	LPSTR	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
	LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
	int width=phead->biWidth;
	int height=phead->biHeight;
	int biBitCount = phead->biBitCount/8;
	if(biBitCount==3)//不处理彩色图像
	{
		::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
		::GlobalUnlock(dib); 
		return;
	}
	int lineByte=(width * biBitCount+3)/4*4;
	unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);

	morphologyDlg dlg;
	
	if(dlg.DoModal()!=IDOK){
		::GlobalUnlock(dib);
		return;
	}
  int mask[25]={0}, maskSize=5;
		if(dlg.m_maskSelect==0){
			mask[6]=1, mask[7]=1, mask[8]=1;
			mask[11]=1, mask[12]=1, mask[13]=1;
			mask[16]=1, mask[17]=1, mask[18]=1;
		}
		else{
			DefineMaskDlg defDlg;
			if(defDlg.DoModal()==IDOK){
				int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
					defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
					defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
					defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
					defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
				for(int i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int i, count=0;
		for(i=0;i<25;i++){
			if(mask[i]==1)
				count++;
		}
		if(count==0)
			{
				::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
				return;
			}
		
	unsigned char *lpOut=new unsigned char [height*lineByte];
   MorphGrad((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);

//	::memcpy(lpIn,lpOut,height*lineByte);
   int newLineByte=lineByte;
		int palSize=::PaletteSize((LPSTR)lpDIB);
		HANDLE dibNew=::GlobalAlloc(GHND, sizeof(BITMAPINFOHEADER)+ palSize+height*newLineByte);
		LPSTR lpDIBNew = (LPSTR) ::GlobalLock(dibNew);
		
		::memcpy((unsigned char*)lpDIBNew, (unsigned char*)lpDIB, sizeof(BITMAPINFOHEADER)+ palSize);
		BITMAPINFOHEADER *info=(BITMAPINFOHEADER*)lpDIBNew;
		info->biHeight=height;
		info->biWidth=width;
		unsigned char *lpDIBBitsNew=(unsigned char *)::FindDIBBits(lpDIBNew);
		for(i=0;i<height*newLineByte;i++){
				*(lpDIBBitsNew+i)=lpOut[i];
		}
		::GlobalUnlock(dib); 
		::GlobalUnlock(dibNew); 
		
		CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
		pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
		
		CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
		CDemoDoc* pDocNew=pView->GetDocument();
		
		pDocNew->ReplaceHDIB((HDIB)dibNew);
		pDocNew->InitDIBData();
		pDocNew->UpdateAllViews(pView);
  delete []lpOut;
	Invalidate();
}

void CDemoView::OnTopHatPeak() 
{
	CDemoDoc *pDoc=GetDocument();
	HDIB dib=pDoc->GetHDIB();
	if(dib==NULL) 
	{
		::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
		return;
	}

	LPSTR	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
	LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
	int width=phead->biWidth;
	int height=phead->biHeight;
	int biBitCount = phead->biBitCount/8;
	if(biBitCount==3)//不处理彩色图像
	{
		::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
		::GlobalUnlock(dib); 
		return;
	}
	int lineByte=(width * biBitCount+3)/4*4;
	unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);

	morphologyDlg dlg;
	
	if(dlg.DoModal()!=IDOK){
		::GlobalUnlock(dib);
		return;
	}
  int mask[25]={0}, maskSize=5;
		if(dlg.m_maskSelect==0){
			mask[6]=1, mask[7]=1, mask[8]=1;
			mask[11]=1, mask[12]=1, mask[13]=1;
			mask[16]=1, mask[17]=1, mask[18]=1;
		}
		else{
			DefineMaskDlg defDlg;
			if(defDlg.DoModal()==IDOK){
				int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
					defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
					defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
					defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
					defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
				for(int i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int i, count=0;
		for(i=0;i<25;i++){
			if(mask[i]==1)
				count++;
		}
		if(count==0)
			{
				::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
				return;
			}
		
	unsigned char *lpOut=new unsigned char [height*lineByte];
   TopHatPeak((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);

	::memcpy(lpIn,lpOut,height*lineByte);	
	::GlobalUnlock(dib);
  delete []lpOut;
//	pDoc->SetModifiedFlag(TRUE);
	Invalidate();
}

void CDemoView::OnTopHatVally() 
{
	CDemoDoc *pDoc=GetDocument();
	HDIB dib=pDoc->GetHDIB();
	if(dib==NULL) 
	{
		::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
		return;
	}

	LPSTR	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
	LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
	int width=phead->biWidth;
	int height=phead->biHeight;
	int biBitCount = phead->biBitCount/8;
	if(biBitCount==3)//不处理彩色图像
	{
		::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
		::GlobalUnlock(dib); 
		return;
	}
	int lineByte=(width * biBitCount+3)/4*4;
	unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);

	morphologyDlg dlg;
	
	if(dlg.DoModal()!=IDOK){
		::GlobalUnlock(dib);
		return;
	}
  int mask[25]={0}, maskSize=5;
		if(dlg.m_maskSelect==0){
			mask[6]=1, mask[7]=1, mask[8]=1;
			mask[11]=1, mask[12]=1, mask[13]=1;
			mask[16]=1, mask[17]=1, mask[18]=1;
		}
		else{
			DefineMaskDlg defDlg;
			if(defDlg.DoModal()==IDOK){
				int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
					defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
					defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
					defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
					defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
				for(int i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int i, count=0;
		for(i=0;i<25;i++){
			if(mask[i]==1)
				count++;
		}
		if(count==0)
			{
				::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
				return;
			}
		
	unsigned char *lpOut=new unsigned char [height*lineByte];
   TopHatVally((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);

	::memcpy(lpIn,lpOut,height*lineByte);	
	::GlobalUnlock(dib);
  delete []lpOut;
//	pDoc->SetModifiedFlag(TRUE);
	Invalidate();
}

void CDemoView::OnTophatPeakVally() 
{
	CDemoDoc *pDoc=GetDocument();
	HDIB dib=pDoc->GetHDIB();
	if(dib==NULL) 
	{
		::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
		return;
	}

	LPSTR	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
	LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
	int width=phead->biWidth;
	int height=phead->biHeight;
	int biBitCount = phead->biBitCount/8;
	if(biBitCount==3)//不处理彩色图像
	{
		::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
		::GlobalUnlock(dib); 
		return;
	}
	int lineByte=(width * biBitCount+3)/4*4;
	unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);

	morphologyDlg dlg;
	
	if(dlg.DoModal()!=IDOK){
		::GlobalUnlock(dib);
		return;
	}
  int mask[25]={0}, maskSize=5;
		if(dlg.m_maskSelect==0){
			mask[6]=1, mask[7]=1, mask[8]=1;
			mask[11]=1, mask[12]=1, mask[13]=1;
			mask[16]=1, mask[17]=1, mask[18]=1;
		}
		else{
			DefineMaskDlg defDlg;
			if(defDlg.DoModal()==IDOK){
				int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
					defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
					defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
					defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
					defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
				for(int i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int i, count=0;
		for(i=0;i<25;i++){
			if(mask[i]==1)
				count++;
		}
		if(count==0)
			{
				::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
				return;
			}
		
	unsigned char *lpOut=new unsigned char [height*lineByte];
   TopHatVally((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);

	::memcpy(lpIn,lpOut,height*lineByte);	
	::GlobalUnlock(dib);
  delete []lpOut;
//	pDoc->SetModifiedFlag(TRUE);
	Invalidate();
}

⌨️ 快捷键说明

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