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

📄 earview.cpp

📁 人耳识别技术是20世纪90年代末开始兴起的一种生物特征识别技术
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	// 显示对话框,提示用户设定平移量
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}	
	// 获取用户设定的平移量
	fA = dlgPara.m_fA;
	fB = dlgPara.m_fB;

	delete dlgPara;	
	BeginWaitCursor();
	
	// 调用LinerTrans()函数进行线性变换
	pDoc->GetDibImage()->LinerTrans(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
		pDoc->GetDibImage()->DIBHeight(lpDIB), fA, fB);
	
	pDoc->SetModifiedFlag(TRUE);	// 设置脏标记	
	pDoc->UpdateAllViews(NULL);		// 更新视图
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
	EndWaitCursor();	
}

void CEARView::OnPointThre() 
{
	// TODO: Add your command handler code here
	// 阈值变换

	CEARDoc* pDoc = GetDocument();
		
	LPSTR	lpDIB;				// 指向DIB的指针	
	LPSTR   lpDIBBits;			// 指向DIB象素指针	
	CPointThreDlg  dlgPara;		// 参数对话框	
	BYTE	bThre;				// 阈值

	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());	
	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的阈值变换,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的阈值变换!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}	
	dlgPara.m_bThre = 128;
	
	// 显示对话框,提示用户设定阈值
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}
	bThre = dlgPara.m_bThre;

	delete dlgPara;	
	BeginWaitCursor();
	
	// 调用ThresholdTrans()函数进行阈值变换
	pDoc->GetDibImage()->ThresholdTrans(lpDIBBits, 
		pDoc->GetDibImage()->DIBWidth(lpDIB), 
		pDoc->GetDibImage()->DIBHeight(lpDIB), bThre);
	
	pDoc->SetModifiedFlag(TRUE);	// 设置脏标记	
	pDoc->UpdateAllViews(NULL);		// 更新视图
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
	EndWaitCursor();
}

void CEARView::OnPointWind() 
{
	// TODO: Add your command handler code here
	// 窗口变换

	CEARDoc* pDoc = GetDocument();
	
	LPSTR lpDIB;				// 指向DIB的指针
	LPSTR    lpDIBBits;			// 指向DIB象素指针
	CPointWinDlg  dlgPara;		// 创建对话框	
	BYTE	bLow;				// 窗口下限	
	BYTE	bUp;				// 窗口上限

	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());	
	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的窗口变换,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的窗口变换!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
		return;
	}

	dlgPara.m_bLow = 0;
	dlgPara.m_bUp = 255;
	
	// 显示对话框,提示用户设定窗口上下限
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}
	bLow = dlgPara.m_bLow;
	bUp = dlgPara.m_bUp;

	delete dlgPara;	
	BeginWaitCursor();
	
	// 调用WindowTrans()函数进行窗口变换
	pDoc->GetDibImage()->WindowTrans(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB), 
		pDoc->GetDibImage()->DIBHeight(lpDIB), bLow, bUp);
	
	pDoc->SetModifiedFlag(TRUE);	// 设置脏标记	
	pDoc->UpdateAllViews(NULL);		// 更新视图
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
	EndWaitCursor();	
}

void CEARView::OnPointStre() 
{
	// TODO: Add your command handler code here
	// 灰度拉伸
	
	CEARDoc* pDoc = GetDocument();
		
	LPSTR	lpDIB;				// 指向DIB的指针	
	LPSTR   lpDIBBits;			// 指向DIB象素指针	
	CPointStreDlg dlgPara;		// 创建对话框	
	BYTE	bX1,bY1;			// 点1坐标		
	BYTE	bX2,bY2;			// 点2坐标

	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的灰度拉伸,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的灰度拉伸!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}
	
	dlgPara.m_bX1 = 50;
	dlgPara.m_bY1 = 30;
	dlgPara.m_bX2 = 200;
	dlgPara.m_bY2 = 220;
	
	// 显示对话框,提示用户设定拉伸位置
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}	
	bX1 = dlgPara.m_bX1;
	bY1 = dlgPara.m_bY1;
	bX2 = dlgPara.m_bX2;
	bY2 = dlgPara.m_bY2;

	delete dlgPara;		
	BeginWaitCursor();
	
	// 调用GrayStretch()函数进行灰度拉伸
	pDoc->GetDibImage()->GrayStretch(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB), 
		pDoc->GetDibImage()->DIBHeight(lpDIB), bX1, bY1, bX2, bY2);
	
	pDoc->SetModifiedFlag(TRUE);	// 设置脏标记	
	pDoc->UpdateAllViews(NULL);		// 更新视图
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
	EndWaitCursor();	
}

void CEARView::OnPointEqua() 
{
	// TODO: Add your command handler code here
	// 灰度均衡

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

		return;
	}
	
	BeginWaitCursor();
	
	// 调用InteEqualize()函数进行直方图均衡
	pDoc->GetDibImage()->InteEqualize(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB), 
		pDoc->GetDibImage()->DIBHeight(lpDIB));

	pDoc->SetModifiedFlag(TRUE);	// 设置脏标记	
	pDoc->UpdateAllViews(NULL);		// 更新视图
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
	EndWaitCursor();	
}

void CEARView::OnEnhaSmooth() 
{
	// TODO: Add your command handler code here
	// 图像平滑
	
	CEARDoc* pDoc = GetDocument();
		
	LPSTR	lpDIB;				// 指向DIB的指针	
	LPSTR   lpDIBBits;			// 指向DIB象素指针	
	int		iTempH;				// 模板高度	
	int		iTempW;				// 模板宽度	
	FLOAT	fTempC;				// 模板系数	
	int		iTempMX;			// 模板中心元素X坐标	
	int		iTempMY;			// 模板中心元素Y坐标
	FLOAT	aValue[25];			// 模板元素数组

	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的平滑,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的平滑!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
		
		return;
	}
	
	CSmoothDlg dlgPara;	
	// 给模板数组赋初值(为平均模板)
	aValue[0] = 1.0;
	aValue[1] = 1.0;
	aValue[2] = 1.0;
	aValue[3] = 0.0;
	aValue[4] = 0.0;
	aValue[5] = 1.0;
	aValue[6] = 1.0;
	aValue[7] = 1.0;
	aValue[8] = 0.0;
	aValue[9] = 0.0;
	aValue[10] = 1.0;
	aValue[11] = 1.0;
	aValue[12] = 1.0;
	aValue[13] = 0.0;
	aValue[14] = 0.0;
	aValue[15] = 0.0;
	aValue[16] = 0.0;
	aValue[17] = 0.0;
	aValue[18] = 0.0;
	aValue[19] = 0.0;
	aValue[20] = 0.0;
	aValue[21] = 0.0;
	aValue[22] = 0.0;
	aValue[23] = 0.0;
	aValue[24] = 0.0;

	dlgPara.m_intType = 0;
	dlgPara.m_iTempH  = 3;
	dlgPara.m_iTempW  = 3;
	dlgPara.m_iTempMX = 1;
	dlgPara.m_iTempMY = 1;
	dlgPara.m_fTempC  = (FLOAT) (1.0 / 9.0);
	dlgPara.m_fpArray = aValue;
	
	// 显示对话框,提示用户设定平移量
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}
	
	iTempH  = dlgPara.m_iTempH;
	iTempW  = dlgPara.m_iTempW;
	iTempMX = dlgPara.m_iTempMX;
	iTempMY = dlgPara.m_iTempMY;
	fTempC  = dlgPara.m_fTempC;
	
	delete dlgPara;	
	BeginWaitCursor();
	
	// 调用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::OnEnhaMidianF() 
{
	// TODO: Add your command handler code here
	// 中值滤波
	
	CEARDoc* pDoc = GetDocument();
	
	LPSTR	lpDIB;				// 指向DIB的指针
	LPSTR   lpDIBBits;			// 指向DIB象素指针	
	int iFilterH;				// 滤波器的高度	
	int iFilterW;				// 滤波器的宽度	
	int iFilterMX;				// 中心元素的X坐标	
	int iFilterMY;				// 中心元素的Y坐标

	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的中值滤波,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		MessageBox("目前只支持256色位图的中值滤波!", "系统提示" ,
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}

	CMidFilterDlg dlgPara;
	dlgPara.m_iFilterType = 0;
	dlgPara.m_iFilterH = 3;
	dlgPara.m_iFilterW = 1;
	dlgPara.m_iFilterMX = 0;
	dlgPara.m_iFilterMY = 1;	
	// 显示对话框,提示用户设定平移量
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}

	iFilterH = dlgPara.m_iFilterH;
	iFilterW = dlgPara.m_iFilterW;
	iFilterMX = dlgPara.m_iFilterMX;
	iFilterMY = dlgPara.m_iFilterMY;
	delete dlgPara;	
	
	BeginWaitCursor();
	
	// 调用MedianFilter()函数中值滤波
	if (pDoc->GetDibImage()->MedianFilter(lpDIBBits, 
		pDoc->GetDibImage()->DIBWidth(lpDIB), pDoc->GetDibImage()->
		DIBHeight(lpDIB), iFilterH, iFilterW, iFilterMX, iFilterMY))
	{
		pDoc->SetModifiedFlag(TRUE);		// 设置脏标记		
		pDoc->UpdateAllViews(NULL);			// 更新视图
	}
	else
	{
		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	EndWaitCursor();	
}

void CEARView::OnEnhaGradsharp() 
{
	// TODO: Add your command handler code here
	// 梯度锐化

	// 获取文档
	CEARDoc* pDoc = GetDocument();
		
	LPSTR	lpDIB;				// 指向DIB的指针	
	LPSTR   lpDIBBits;			// 指向DIB象素指针
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());	// 锁定DIB

	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);	
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的梯度锐化,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
	{
		// 提示用户
		MessageBox("目前只支持256色位图的梯度锐化!", "系统提示" , 
			MB_ICONINFORMATION | MB_OK);

		// 解除锁定
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}
	
	BYTE	bThre;			// 阈值

	CSharpThreDlg dlgPara;	// 创建对话框
	
	// 初始化变量值
	dlgPara.m_bThre = 10;	
	// 提示用户输入阈值
	if (dlgPara.DoModal() != IDOK)
	{
		return;
	}
	
	bThre = dlgPara.m_bThre;	// 获取用户的设定
	delete dlgPara;				// 删除对话框
	
	BeginWaitCursor();			// 更改光标形状
	
	// 调用GradSharp()函数进行梯度板锐化
	if (pDoc->GetDibImage()->GradSharp(lpDIBBits,
		pDoc->GetDibImage()->DIBWidth(lpDIB), 
		pDoc->GetDibImage()->DIBHeight(lpDIB), bThre))
	{		
		pDoc->SetModifiedFlag(TRUE);		// 设置脏标记		
		pDoc->UpdateAllViews(NULL);			// 更新视图
	}
	else
	{
		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 解除锁定

	EndWaitCursor();	// 恢复光标
}

void CEARView::OnEnhaSharp() 
{
	// TODO: Add your command handler code here
	// 图像拉普拉斯锐化
	
	// 获取文档
	CEARDoc* pDoc = GetDocument();
	
	LPSTR	lpDIB;				// 指向DIB的指针	
	LPSTR   lpDIBBits;			// 指向DIB象素指针	
	int		iTempH;				// 模板高度	
	int		iTempW;				// 模板宽度	
	FLOAT	fTempC;				// 模板系数	
	int		iTempMX;			// 模板中心元素X坐标	
	int		iTempMY;			// 模板中心元素Y坐标	
	FLOAT	aValue[9];			// 模板元素数组

	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);	
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的锐化,其它的可以类推)
	if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)

⌨️ 快捷键说明

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