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

📄 demoview.cpp

📁 visual c++图像处理经典算法示例程序 把功能都集中在一个程序中
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		int lineByte2=(w * b+3)/4*4;
		unsigned char *lpOut1=new unsigned char [h*lineByte2];
		PointEqual((LPBYTE)lpIn,(LPBYTE)lpOut1,w,h,0);
		::memcpy(lpIn,lpOut1,h*lineByte2);
		::GlobalUnlock(dib);
		pDoc->SetModifiedFlag(TRUE);
		delete []lpOut1;
	}
	else{
		::MessageBox(0,"只处理彩色图象!",MB_OK,0);
	}
			
	::GlobalUnlock(dib); 
	
	Invalidate();
}

void CDemoView::OnErosionErzhi() 
{
	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);

	int gray;
	for(int i=0;i<height;i++)//判断是否是二值图像
	{
		for(int j=0;j<lineByte;j++)
		{
			gray=*(lpIn+i*lineByte+j);
			if(gray!=0&&gray!=255)
			{
				::MessageBox(0,"不是二值的图像!",NULL,MB_OK);
				::GlobalUnlock(dib); 
				return;
			}
		}
	}

	morphologyDlg dlg;
	
	if(dlg.DoModal()!=IDOK){
		::GlobalUnlock(dib);
		return;
	}
  int mask[25]={0}, maskSize=5;
		if(dlg.m_maskSelect==0){
			mask[7]=1;
			mask[11]=1;
			mask[12]=1;
			mask[13]=1;
			mask[17]=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(i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int 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];
	Terode((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);

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

void CDemoView::OnErzhiExpand() 
{
	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);

	int gray;
	for(int i=0;i<height;i++)//判断是否是二值图像
	{
		for(int j=0;j<lineByte;j++)
		{
			gray=*(lpIn+i*lineByte+j);
			if(gray!=0&&gray!=255)
			{
				::MessageBox(0,"不是二值的图像!",NULL,MB_OK);
				::GlobalUnlock(dib); 
				return;
			}
		}
	}

	morphologyDlg dlg;
	
	if(dlg.DoModal()!=IDOK){
		::GlobalUnlock(dib);
		return;
	}
  int mask[25]={0}, maskSize=5;
		if(dlg.m_maskSelect==0){
			mask[7]=1;
			mask[11]=1;
			mask[12]=1;
			mask[13]=1;
			mask[17]=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(i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int 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];
	Texpand((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);

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

void CDemoView::OnErzhiOpen() 
{
	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);

	int gray;
	for(int i=0;i<height;i++)//判断是否是二值图像
	{
		for(int j=0;j<lineByte;j++)
		{
			gray=*(lpIn+i*lineByte+j);
			if(gray!=0&&gray!=255)
			{
				::MessageBox(0,"不是二值的图像!",NULL,MB_OK);
				::GlobalUnlock(dib); 
				return;
			}
		}
	}

	morphologyDlg dlg;
	
	if(dlg.DoModal()!=IDOK){
		::GlobalUnlock(dib);
		return;
	}
  int mask[25]={0}, maskSize=5;
		if(dlg.m_maskSelect==0){
			mask[7]=1;
			mask[11]=1;
			mask[12]=1;
			mask[13]=1;
			mask[17]=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(i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int 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];
  Terode((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
	Texpand((LPBYTE)lpOut,(LPBYTE)lpIn,width,height,mask);

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

void CDemoView::OnErzhClose() 
{
	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);

	int gray;
	for(int i=0;i<height;i++)//判断是否是二值图像
	{
		for(int j=0;j<lineByte;j++)
		{
			gray=*(lpIn+i*lineByte+j);
			if(gray!=0&&gray!=255)
			{
				::MessageBox(0,"不是二值的图像!",NULL,MB_OK);
				::GlobalUnlock(dib); 
				return;
			}
		}
	}

	morphologyDlg dlg;
	
	if(dlg.DoModal()!=IDOK){
		::GlobalUnlock(dib);
		return;
	}
  int mask[25]={0}, maskSize=5;
		if(dlg.m_maskSelect==0){
			mask[7]=1;
			mask[11]=1;
			mask[12]=1;
			mask[13]=1;
			mask[17]=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(i=0;i<25;i++)
					mask[i]=m[i];
				maskSize=5;
			}
		}
		int 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];
  Texpand((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
	Terode((LPBYTE)lpOut,(LPBYTE)lpIn,width,height,mask);

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

void CDemoView::OnGrayErose() 
{
	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);
	
	::memcpy(lpIn,lpOut,height*lineByte);

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

void CDemoView::OnGrayExpand() 
{
		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,

⌨️ 快捷键说明

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