索引图像的二值化


索引图像的二值化


HBITMAP MyReadPic(wchar_t* wcImageFile)
{
	CImage Img;
	Img.Load(wcImageFile);

	//灰度字图的二值化
	if(Img.IsIndexed())
	{
		long lColorSum=0;
		int iMaxCTEntries=0;
		int iColorAve=0;
		int iMin=0;
		RGBQUAD* rgbQuad=NULL;
		COLORREF cr;

		iMaxCTEntries=Img.GetMaxColorTableEntries();

		try
		{
			rgbQuad=new RGBQUAD[iMaxCTEntries];      // 颜色数组
		} 
		catch(...)
		{
			return NULL;
		}

		Img.GetColorTable(0,iMaxCTEntries,rgbQuad);  // 将图像调色板颜色 置入颜色数组中

		iMin=Img.GetWidth()<Img.GetHeight()?Img.GetWidth():Img.GetHeight();
		for(int i=0;i<iMin;i++)
		{
			cr=Img.GetPixel(i,i);
			lColorSum+=GetRValue(cr);                // 对角线上的颜色之和
		}

		iColorAve=lColorSum/iMin;                    // 对角线上的平均颜色

		for(int i=0;i<iMaxCTEntries;i++)
		{
			if(rgbQuad[i].rgbBlue>iColorAve)         // 以平均颜色为基准线,二值化图像 
			{
				rgbQuad[i].rgbBlue=255;
				rgbQuad[i].rgbGreen=255; 
				rgbQuad[i].rgbRed=255;
			}
			else
			{
				rgbQuad[i].rgbBlue=0;
				rgbQuad[i].rgbGreen=0; 
				rgbQuad[i].rgbRed=0;
			}
		}
		Img.SetColorTable(0,iMaxCTEntries,rgbQuad);   // 将二值化后的颜色数组更新到图像调色板中  从而将图像设置为二值化图像
		delete[] rgbQuad;
	}

	return Img.Detach();							  // 返回二值化后的图像
}


你可能感兴趣的:(null,delete)