圖像預處理第2步:將灰度圖二值化

//圖像預處理第2步:將灰度圖二值化
void CChildView::OnIMGPRCGrayToWhiteBlack()
{
    ConvertGrayToWhiteBlack(m_hDIB);
    //在屏幕上顯示位圖
    CDC* pDC=GetDC();
    DisplayDIB(pDC,m_hDIB);    
}
/******************************************************************
*
* 函數名稱ConvertGrayToWhiteBlack()
*
* 參數 :HDIB hDIB     -原圖的句柄
*
* 返回值:無
*
* 功能: ConvertGrayToWhiteBlack函數採用硬閾值的方法,實現將圖像二值化的功能。
* 
* 說明:
要求待處理的圖片爲256色
************************************************************************/

void ConvertGrayToWhiteBlack(HDIB hDIB)
{
	// 指向DIB的指針
	LPSTR	lpDIB;
	
	// 由DIB句柄獲得DIB指針並鎖定DIB
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB);
	
	// 指向DIB象素數據區的指針
	LPSTR   lpDIBBits;
	
	// 指向DIB象素的指針
	BYTE *	lpSrc;	

	// 圖像寬度
	LONG	lWidth;	

	// 圖像高度
	LONG	lHeight;	
	// 圖像每行的字節數
	LONG	lLineBytes;	

	// 找到DIB圖像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);	
	
	// 獲取圖像寬度
	lWidth = ::DIBWidth(lpDIB);	

	// 獲取圖像高度
	lHeight = ::DIBHeight(lpDIB);	

	// 計算圖像每行的字節數
	lLineBytes = WIDTHBYTES(lWidth * 8);	

	// 更換每一個象素的顏色索引(即按照灰度映射表換成灰度值)
	int i,j;

    //逐行掃描
	for(i = 0; i < lHeight; i++)
 {

   //逐列掃描
	for(j = 0; j < lWidth; j++)
	{

	// 指向DIB第i行,第j個象素的指針
	lpSrc = (unsigned char*)lpDIBBits + lLineBytes * i + j;

	// 二值化處理

   //大於220,設置爲255,即白點
	if(*lpSrc>220) *lpSrc=255;

  //不然設置爲0,即黑點
	else *lpSrc=0;

	}

}

  運行效果:函數

相關文章
相關標籤/搜索