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

📄 edgecontourview.cpp

📁 人民邮电出版社的——Visual C++数字图像处理典型算法及实现(源码) 希望大家能用上
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			MB_ICONINFORMATION | MB_OK);
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

		return;
	}

	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
	
	// 调用FillDIB()函数对DIB进行种子填充
	if (pDoc->GetDibImage()->FillDIB(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 CEdgeContourView::OnEdgeFill2() 
{
	//种子填充运算

	CEdgeContourDoc* 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()->Fill2DIB(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 CEdgeContourView::OnEdgeGauss() 
{
	//Gauss边缘检测运算

	CEdgeContourDoc* 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);
	
	// 调用GaussDIB()函数对DIB进行边缘检测
	if (pDoc->GetDibImage()->GaussDIB(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 CEdgeContourView::OnEdgeHough() 
{
	//Hough运算

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

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

		return;
	}
	
	BeginWaitCursor();

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

	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

	EndWaitCursor();
}

void CEdgeContourView::OnEdgeKirsch() 
{
	//Kirsch边缘检测运算

	CEdgeContourDoc* 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 CEdgeContourView::OnEdgePrewitt() 
{
	//Prewitt边缘检测运算

	CEdgeContourDoc* 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);
	
	// 调用PrewittDIB()函数对DIB进行边缘检测
	if (pDoc->GetDibImage()->PrewittDIB(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 CEdgeContourView::OnEdgeRobert() 
{
	//Robert边缘检测运算

	CEdgeContourDoc* 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);
	
	// 调用RobertDIB()函数对DIB进行边缘检测
	if (pDoc->GetDibImage()->RobertDIB(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 CEdgeContourView::OnEdgeSobel() 
{
	//Sobel边缘检测运算

	CEdgeContourDoc* 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 CEdgeContourView::OnEdgeTrace() 
{
	//轮廓跟踪运算

	CEdgeContourDoc* 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);
	
	// 调用TraceDIB()函数对DIB进行轮廓跟踪
	if (pDoc->GetDibImage()->TraceDIB(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB), 
		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 + -