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

📄 imageprocessingview.cpp

📁 提供了图像识别
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	
	// 更改光标形状
	BeginWaitCursor();
	
	// 调用GrayStretch()函数进行灰度拉伸
	GraySegLinTrans(pDoc->m_pDibInit, nX1, nY1, nX2, nY2);
	
	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
	
	// 更新视图
	pDoc->UpdateAllViews(NULL);
	
	// 恢复光标
	EndWaitCursor();
}

void CImageProcessingView::OnEnhanceHistequ() 
{
	// 直方图均衡

	// 获取文档
	CImageProcessingDoc* pDoc = GetDocument();
		
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的直方图均衡,其它的可以类推)
	if(pDoc->m_pDibInit->m_nColorTableEntries != 256)
	{
		// 提示用户
		MessageBox("目前只支持256色位图的伪彩色变换!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);

		// 返回
		return;
	}
	
	// 更改光标形状
	BeginWaitCursor();
	
	// 调用HistogramEqualize()函数进行直方图均衡
	HistogramEqualize(pDoc->m_pDibInit);
	
	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
	
	// 更新视图
	pDoc->UpdateAllViews(NULL);
		
	// 恢复光标
	EndWaitCursor();	
}

/*************************************************************************
 *
 * \函数名称:
 *   OnRegReg()
 *
 * \输入参数:
 *   无
 * 
 * \返回值:
 *   无
 *
 * \说明:
 *   该函数实现图象的配准
 *
 *************************************************************************
 */
void CImageProcessingView::OnRegReg() 
{	
	// 获得文档类句柄
	CImageProcessingDoc* pDoc;
	pDoc = GetDocument();

	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的水平镜像,其它的可以类推)
	if(pDoc->m_pDibInit->m_nColorTableEntries != 256)
	{
		// 提示用户
		MessageBox("目前只支持256色位图的图象配准!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		
		// 返回
		return;
	}
	
	// 打开图象配准对话框
	CDlgReg* pDlg=new CDlgReg(NULL,pDoc);

	pDlg->DoModal();

	delete pDlg;
}

/*************************************************************************
 *
 * \函数名称:
 *   OnEnhanceSharp()
 *
 * \输入参数:
 *   无
 * 
 * \返回值:
 *   无
 *
 * \说明:
 *   该函数利用Laplacian算子实现图象的锐化
 *
 *************************************************************************
 */
void CImageProcessingView::OnEnhanceSharp() 
{
	//更改光标形状
	BeginWaitCursor(); 
	
	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 sizeImage = pDib->GetDimensions();
	int nWidth = sizeImage.cx ;
	int nHeight= sizeImage.cy ;
	
	int nSaveWidth = pDib->GetDibSaveDim().cx;
	
	// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
	unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
	
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
		}
	}
	
	// 调用LinearSharpen函数进行图象锐化增强
	LinearSharpen(pUnchImage, nWidth, nHeight) ;
	
	// 增强以后的图象拷贝到pDib中,进行显示
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
		}
	}
	
	// 释放内存
	delete []pUnchImage;
	pUnchImage = NULL  ;
	
	// 恢复光标形状
	EndWaitCursor(); 
	
	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
	
	// 更新视图
	pDoc->UpdateAllViews(NULL);
	
}

/*************************************************************************
*
* \函数名称:
*   OnEnhanceSmoothFr()
*
* \输入参数:
*   无
*
* \返回值:
*   无
*
* \说明:
*   该函数利用低通滤波实现图象平滑
*
************************************************************************
*/
void CImageProcessingView::OnEnhanceSmoothFr() 
{
	// TODO: Add your command handler code here
	//更改光标形状
	BeginWaitCursor(); 
	
	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 sizeImage = pDib->GetDimensions();
	int nWidth = sizeImage.cx ;
	int nHeight= sizeImage.cy ;

	int nSaveWidth = pDib->GetDibSaveDim().cx;
	
	// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
	unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
	
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
		}
	}

	// 调用低通滤波函数进行图象增强
	LowPassFilterEnhance(pUnchImage, nWidth, nHeight, nWidth/16) ;
	
	// 增强以后的图象拷贝到pDib中,进行显示
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
		}
	}
	
	// 释放内存
	delete []pUnchImage;
	pUnchImage = NULL  ;
	
	// 恢复光标形状
	EndWaitCursor(); 
	
	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
	
	// 更新视图
	pDoc->UpdateAllViews(NULL);
}

/*************************************************************************
*
* \函数名称:
*   OnEnhanceButtLow()
*
* \输入参数:
*   无
*
* \返回值:
*   无
*
* \说明:
*   该函数利用Butterworth低通滤波实现图象平滑
*
************************************************************************
*/
void CImageProcessingView::OnEnhanceButtLow() 
{
	// TODO: Add your command handler code here
	//更改光标形状
	BeginWaitCursor(); 
	
	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 sizeImage = pDib->GetDimensions();
	int nWidth = sizeImage.cx ;
	int nHeight= sizeImage.cy ;
	
	int nSaveWidth = pDib->GetDibSaveDim().cx;
	
	// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
	unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
	
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
		}
	}
	
	// 调用ButterWorth低通滤波函数进行图象增强
	ButterWorthLowPass(pUnchImage, nWidth, nHeight, nWidth/2) ;
	
	// 增强以后的图象拷贝到pDib中,进行显示
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
		}
	}
	
	// 释放内存
	delete []pUnchImage;
	pUnchImage = NULL  ;
	
	// 恢复光标形状
	EndWaitCursor(); 
	
	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
	
	// 更新视图
	pDoc->UpdateAllViews(NULL);
}

/*************************************************************************
*
* \函数名称:
*   OnEnhanceSharpFreq()
*
* \输入参数:
*   无
*
* \返回值:
*   无
*
* \说明:
*   该函数利用高通滤波实现图象增强
*
************************************************************************
*/
void CImageProcessingView::OnEnhanceSharpFreq() 
{
	// TODO: Add your command handler code here
	//更改光标形状
	BeginWaitCursor(); 
	
	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 sizeImage = pDib->GetDimensions();
	int nWidth = sizeImage.cx ;
	int nHeight= sizeImage.cy ;
	
	int nSaveWidth = pDib->GetDibSaveDim().cx;
	
	// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
	unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
	
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
		}
	}
	
	// 调用高通滤波函数进行图象增强
	HighPassFilterEnhance(pUnchImage, nWidth, nHeight, 50) ;
	
	// 增强以后的图象拷贝到pDib中,进行显示
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
		}
	}
	
	// 释放内存
	delete []pUnchImage;
	pUnchImage = NULL  ;
	
	// 恢复光标形状
	EndWaitCursor(); 
	
	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
	
	// 更新视图
	pDoc->UpdateAllViews(NULL);
}

/*************************************************************************
*
* \函数名称:
*   OnEnhanceButtHight()
*
* \输入参数:
*   无
*
* \返回值:
*   无
*
* \说明:
*   该函数利用Butterworth高通滤波实现图象平滑
*
************************************************************************
*/
void CImageProcessingView::OnEnhanceButtHight() 
{	
	//更改光标形状
	BeginWaitCursor(); 
	
	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 sizeImage = pDib->GetDimensions();
	int nWidth = sizeImage.cx ;
	int nHeight= sizeImage.cy ;
	
	int nSaveWidth = pDib->GetDibSaveDim().cx;
	
	// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
	unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
	
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
		}
	}
	
	// 调用ButterWorth高通滤波函数进行图象增强
	ButterWorthHighPass(pUnchImage, nWidth, nHeight, nWidth/2) ;
	
	// 增强以后的图象拷贝到pDib中,进行显示
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
		}
	}
	
	// 释放内存
	delete []pUnchImage;
	pUnchImage = NULL  ;
	
	// 恢复光标形状
	EndWaitCursor(); 
	
	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
	
	// 更新视图
	pDoc->UpdateAllViews(NULL);
	
}

/*************************************************************************
*
* \函数名称:
*   OnRegionsegFix()
*
* \输入参数:
*   无
*
* \返回值:
*   无
*
* \说明:
*   实现并行区域分割
*
************************************************************************
*/
void CImageProcessingView::OnRegionsegFix() 
{
	// TODO: Add your command handler code here

	//更改光标形状
	BeginWaitCursor(); 

	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;
	}

	// 调用函数实现固定阈值分割
	RegionSegFixThreshold(pDib,200);

	// 恢复光标形状
	EndWaitCursor(); 
	
	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
	
	// 更新视图
	pDoc->UpdateAllViews(NULL);
}

/*************************************************************************
*
* \函数名称:
*   OnAdaRegionSeg()
*
* \输入参数:
*   无
*
* \返回值:
*   无
*
* \说明:
*   实现自适应区域分割算法
*
************************************************************************
*/
void CImageProcessingView::OnAdaRegionSeg() 
{
	// TODO: Add your command handler code here
	
	//更改光标形状
	BeginWaitCursor(); 

⌨️ 快捷键说明

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