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

📄 earview.cpp

📁 人耳识别技术是20世纪90年代末开始兴起的一种生物特征识别技术
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	{
		MessageBox("目前只支持256色位图的锐化!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}
	
	BeginWaitCursor();
	
	// 设置拉普拉斯模板参数
	iTempW = 3;
	iTempH = 3;
	fTempC = 1.0;
	iTempMX = 1;
	iTempMY = 1;
	aValue[0] = -1.0;
	aValue[1] = -1.0;
	aValue[2] = -1.0;
	aValue[3] = -1.0;
	aValue[4] =  9.0;
	aValue[5] = -1.0;
	aValue[6] = -1.0;
	aValue[7] = -1.0;
	aValue[8] = -1.0;
	
	// 调用Template()函数用拉普拉斯模板锐化DIB
	if (pDoc->GetDibImage()->Template(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB), 
		pDoc->GetDibImage()->DIBHeight(lpDIB), iTempH, iTempW, iTempMX, 
		iTempMY, aValue, fTempC))
	{
		pDoc->SetModifiedFlag(TRUE);		// 设置脏标记		
		pDoc->UpdateAllViews(NULL);			// 更新视图
	}
	else
	{
		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	EndWaitCursor();	
}

void CEARView::OnMorphErosion() 
{
	// TODO: Add your command handler code here
	//腐蚀运算

	CEARDoc* pDoc = GetDocument();
		
	LPSTR	lpDIB;			// 指向DIB的指针	
	LPSTR   lpDIBBits;		// 指向DIB象素指针
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的腐蚀,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的腐蚀!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}

	CMorphErosionDlg dlgPara;
	dlgPara.m_nMode = 0;	
	// 显示对话框,提示用户设定腐蚀方向
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}
	
	// 获取用户设定的腐蚀方向
	int nMode;
	nMode = dlgPara.m_nMode;

	int structure[3][3];
	if (nMode == 2)
	{
		structure[0][0]=dlgPara.m_nStructure1;
		structure[0][1]=dlgPara.m_nStructure2;
		structure[0][2]=dlgPara.m_nStructure3;
		structure[1][0]=dlgPara.m_nStructure4;
		structure[1][1]=dlgPara.m_nStructure5;
		structure[1][2]=dlgPara.m_nStructure6;
		structure[2][0]=dlgPara.m_nStructure7;
		structure[2][1]=dlgPara.m_nStructure8;
		structure[2][2]=dlgPara.m_nStructure9;
	}
	
	delete dlgPara;	
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 调用ErosionDIB()函数腐蚀DIB
	if (pDoc->GetDibImage()->ErosionDIB(lpDIBBits, 
		WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8), 
		pDoc->GetDibImage()->DIBHeight(lpDIB), nMode , structure))
	{
		pDoc->SetModifiedFlag(TRUE);	// 设置脏标记		
		pDoc->UpdateAllViews(NULL);		// 更新视图
	}
	else
	{
		MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	EndWaitCursor();	
}

void CEARView::OnMorphDilation() 
{
	// TODO: Add your command handler code here
	//膨胀运算

	CEARDoc* pDoc = GetDocument();
		
	LPSTR	lpDIB;				// 指向DIB的指针	
	LPSTR   lpDIBBits;			// 指向DIB象素指针
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的膨胀,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的膨胀!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}
	
	CMorphDilationDlg dlgPara;
	dlgPara.m_nMode = 0;	
	// 显示对话框,提示用户设定膨胀方向
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}
	
	// 获取用户设定的膨胀方向
	int nMode;
	nMode = dlgPara.m_nMode;

	int structure[3][3];
	if (nMode == 2)
	{
		structure[0][0]=dlgPara.m_nStructure1;
		structure[0][1]=dlgPara.m_nStructure2;
		structure[0][2]=dlgPara.m_nStructure3;
		structure[1][0]=dlgPara.m_nStructure4;
		structure[1][1]=dlgPara.m_nStructure5;
		structure[1][2]=dlgPara.m_nStructure6;
		structure[2][0]=dlgPara.m_nStructure7;
		structure[2][1]=dlgPara.m_nStructure8;
		structure[2][2]=dlgPara.m_nStructure9;
	}
	
	delete dlgPara;	
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 调用DilationDIB()函数膨胀DIB
	if (pDoc->GetDibImage()->DilationDIB(lpDIBBits, 
		WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8), 
		pDoc->GetDibImage()->DIBHeight(lpDIB), nMode , structure))
	{
		pDoc->SetModifiedFlag(TRUE);	// 设置脏标记		
		pDoc->UpdateAllViews(NULL);		// 更新视图
	}
	else
	{
		MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" ,
			MB_ICONINFORMATION | MB_OK);
	}
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	EndWaitCursor();
}

void CEARView::OnMorphOpen() 
{
	// TODO: Add your command handler code here
	//开运算

	CEARDoc* pDoc = GetDocument();
		
	LPSTR	lpDIB;			// 指向DIB的指针	
	LPSTR   lpDIBBits;		// 指向DIB象素指针
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的开运算,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的开运算!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}

	CMorphOpenDlg dlgPara;
	dlgPara.m_nMode = 0;	
	// 显示对话框,提示用户设定开运算方向
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}
	
	// 获取用户设定的开运算方向
	int nMode;
	nMode = dlgPara.m_nMode;

	int structure[3][3];
	if (nMode == 2)
	{
		structure[0][0]=dlgPara.m_nStructure1;
		structure[0][1]=dlgPara.m_nStructure2;
		structure[0][2]=dlgPara.m_nStructure3;
		structure[1][0]=dlgPara.m_nStructure4;
		structure[1][1]=dlgPara.m_nStructure5;
		structure[1][2]=dlgPara.m_nStructure6;
		structure[2][0]=dlgPara.m_nStructure7;
		structure[2][1]=dlgPara.m_nStructure8;
		structure[2][2]=dlgPara.m_nStructure9;
	}
	
	delete dlgPara;	
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 调用ErosionDIB()函数开运算DIB
	if (pDoc->GetDibImage()->OpenDIB(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB), 
		pDoc->GetDibImage()->DIBHeight(lpDIB), nMode , structure))
	{
		pDoc->SetModifiedFlag(TRUE);	// 设置脏标记		
		pDoc->UpdateAllViews(NULL);		// 更新视图
	}
	else
	{
		MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	EndWaitCursor();	
}

void CEARView::OnMorphClose() 
{
	// TODO: Add your command handler code here
	//闭运算

	CEARDoc* pDoc = GetDocument();
	
	LPSTR	lpDIB;			// 指向DIB的指针	
	LPSTR   lpDIBBits;		// 指向DIB象素指针
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的闭运算,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的闭运算!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}
	
	CMorphCloseDlg dlgPara;
	dlgPara.m_nMode = 0;	
	// 显示对话框,提示用户设定闭运算方向
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}
	
	// 获取用户设定的闭运算方向
	int nMode;
	nMode = dlgPara.m_nMode;

	int structure[3][3];
	if (nMode == 2)
	{
		structure[0][0]=dlgPara.m_nStructure1;
		structure[0][1]=dlgPara.m_nStructure2;
		structure[0][2]=dlgPara.m_nStructure3;
		structure[1][0]=dlgPara.m_nStructure4;
		structure[1][1]=dlgPara.m_nStructure5;
		structure[1][2]=dlgPara.m_nStructure6;
		structure[2][0]=dlgPara.m_nStructure7;
		structure[2][1]=dlgPara.m_nStructure8;
		structure[2][2]=dlgPara.m_nStructure9;
	}
	
	delete dlgPara;		
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 调用CloseDIB()函数对DIB进行闭运算
	if (pDoc->GetDibImage()->CloseDIB(lpDIBBits, 
		WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8), 
		pDoc->GetDibImage()->DIBHeight(lpDIB), nMode , structure))
	{		
		pDoc->SetModifiedFlag(TRUE);	// 设置脏标记		
		pDoc->UpdateAllViews(NULL);		// 更新视图
	}
	else
	{
		MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	EndWaitCursor();	
}

void CEARView::OnEdgeSobel() 
{
	// TODO: Add your command handler code here
	//Sobel边缘检测运算

	CEARDoc* pDoc = GetDocument();
	
	LPSTR	lpDIB;				// 指向DIB的指针	
	LPSTR   lpDIBBits;			// 指向DIB象素指针

	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的运算!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}
	
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 调用SobelDIB()函数对DIB进行边缘检测
	if (pDoc->GetDibImage()->SobelDIB(lpDIBBits, 
		WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8), 
		pDoc->GetDibImage()->DIBHeight(lpDIB)))
	{
		pDoc->SetModifiedFlag(TRUE);		// 设置脏标记		
		pDoc->UpdateAllViews(NULL);			// 更新视图
	}
	else
	{
		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	EndWaitCursor();	
}

void CEARView::OnEdgeKirsch() 
{
	// TODO: Add your command handler code here
	//Kirsch边缘检测运算

	CEARDoc* pDoc = GetDocument();
	
	LPSTR	lpDIB;				// 指向DIB的指针
	LPSTR   lpDIBBits;			// 指向DIB象素指针

	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的运算!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
		
		return;
	}
	
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 调用KirschDIB()函数对DIB进行边缘检测
	if (pDoc->GetDibImage()->KirschDIB(lpDIBBits, 
		WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8), 
		pDoc->GetDibImage()->DIBHeight(lpDIB)))
	{
		pDoc->SetModifiedFlag(TRUE);		// 设置脏标记		
		pDoc->UpdateAllViews(NULL);			// 更新视图
	}
	else
	{
		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	EndWaitCursor();
}	


void CEARView::OnEdgeContour() 
{
	// TODO: Add your command handler code here
	//轮廓提取运算

	CEARDoc* pDoc = GetDocument();
	
	LPSTR	lpDIB;				// 指向DIB的指针	
	LPSTR   lpDIBBits;			// 指向DIB象素指针

	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的轮廓提取,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的运算!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}
	
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 调用FillDIB()函数对DIB进行轮廓提取
	if (pDoc->GetDibImage()->ContourDIB(lpDIBBits, 
		WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8), 
		pDoc->GetDibImage()->DIBHeight(lpDIB)))
	{		
		pDoc->SetModifiedFlag(TRUE);		// 设置脏标记		
		pDoc->UpdateAllViews(NULL);			// 更新视图
	}
	else
	{
		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	EndWaitCursor();	
}

⌨️ 快捷键说明

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