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

📄 ch1_1view.cpp

📁 vc++数字图像处理 ,是一本很不错的介绍数字图像方面的书籍,这里有本书的全部源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
}void CCh1_1View::OnMorphClose() {	//闭运算	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的闭运算,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的闭运算!", "系统提示" , MB_ICONINFORMATION | MB_OK);		// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		int nMode;		// 创建对话框	cDlgMorphClose dlgPara;		// 初始化变量值	dlgPara.m_nMode = 0;		// 显示对话框,提示用户设定闭运算方向	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户设定的闭运算方向	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 = ::FindDIBBits(lpDIB);		// 调用CloseDIB()函数对DIB进行闭运算	if (CloseDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB), nMode , structure))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();		}void CCh1_1View::OnMorphDilation() {	//膨胀运算	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的膨胀,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的膨胀!", "系统提示" , MB_ICONINFORMATION | MB_OK);		// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		int nMode;		// 创建对话框	cDlgMorphDilation dlgPara;		// 初始化变量值	dlgPara.m_nMode = 0;		// 显示对话框,提示用户设定膨胀方向	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户设定的膨胀方向	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 = ::FindDIBBits(lpDIB);		// 调用DilationDIB()函数膨胀DIB	if (DilationDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB), nMode , structure))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}////////////////////////////////////////////////////////////////////////////////////////  边缘与轮廓//void CCh1_1View::OnEdgeHough() {	//Hough运算	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的Hough变换,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的运算!", "系统提示" , MB_ICONINFORMATION | MB_OK);		// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 更改光标形状	BeginWaitCursor();	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 调用HoughDIB()函数对DIB	if (HoughDIB(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB)))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}void CCh1_1View::OnEdgeGauss() {	//Gauss边缘检测运算	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的运算!", "系统提示" , MB_ICONINFORMATION | MB_OK);		// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 更改光标形状	BeginWaitCursor();	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 调用GaussDIB()函数对DIB进行边缘检测	if (GaussDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}void CCh1_1View::OnEdgeKirsch() {	//Kirsch边缘检测运算	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的运算!", "系统提示" , MB_ICONINFORMATION | MB_OK);		// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 更改光标形状	BeginWaitCursor();	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 调用KirschDIB()函数对DIB进行边缘检测	if (KirschDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}void CCh1_1View::OnEdgePrewitt() {	//Prewitt边缘检测运算	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的运算!", "系统提示" , MB_ICONINFORMATION | MB_OK);		// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 更改光标形状	BeginWaitCursor();	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 调用PrewittDIB()函数对DIB进行边缘检测	if (PrewittDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}void CCh1_1View::OnEdgeRobert() {	//Robert边缘检测运算	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的运算!", "系统提示" , MB_ICONINFORMATION | MB_OK);		// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 更改光标形状	BeginWaitCursor();	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 调用RobertDIB()函数对DIB进行边缘检测	if (RobertDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();		}void CCh1_1View::OnEdgeSobel() {	//Sobel边缘检测运算	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的运算!", "系统提示" , MB_ICONINFORMATION | MB_OK);		// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 更改光标形状	BeginWaitCursor();	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 调用SobelDIB()函数对DIB进行边缘检测	if (SobelDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();			}void CCh1_1View::OnEdgeFill() {	//种子填充运算	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的种子填充,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的运算!", "系统提示" , MB_ICONINFORMATION | MB_OK);		// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 更改光标形状	BeginWaitCursor();	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 调用FillDIB()函数对DIB进行种子填充	if (FillDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();		}void CCh1_1View::OnEdgeContour() {	//轮廓提取运算	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock

⌨️ 快捷键说明

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