今天看了图象处理的二值化,和想象的一样简单。下面就是关键代码
#define threshold 128
#define Point(x,y) lpPoints[(x)+(y)*nWidth]
for(y=0;y<nHeight;y++)//核心过程
{
for(x=0;x<nWidth;x++)
{
if (Point(x,y)>(BYTE)threshold) Point(x,y)=255;
else Point(x,y)=0;
}
}
可见,就是将源图象大于128的部分变为255,否则为0。
其实程序中要考虑的还有bmp的象素字节数,就是数据结构BITMAPINFOHEADER的biBitCount。程序中只对24位和8位进行了探讨。24位当然很好做,其实到最后就是将每个象素的每个分量改变。对于每个象素最后不是:ff ff ff就是00 00 00,就是非白即黑。那么对于非24位就将起改为24保存就是了,程序中就是这样处理的。
但是这样得到的文件将比以前的大,对于程序的优化并不是很好的出路。有时间就要研究一下如何得到更小的bmp二值化文件。