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

📄 imageprocessingview.cpp

📁 提供了图像识别
💻 CPP
📖 第 1 页 / 共 5 页
字号:
*/
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 + -