` 二值化有8位的二值化图,即0x00与0xff的二值化图像,每一像素是由8位的数据表示,但它们提值只会有0或255两个,也就是只会有黑、白两种颜色,而不会有灰度。 此二值化对于bmp中的file、info等结构都是不变的,主要是对数据区的数据进行二值。 程序如下: 函数使用了info结构体中的图像宽度与图像高度用以计算图像的像素数。设定小于127的为黑色,值为0;大于127的为白色,值为255。
- void Threshold(bmp *m)
- {
- unsigned char *Image;
- unsigned int i,size;
- Image=m->imgBuf;
- size=m->info.biHeight*m->info.biWidth;
- for(i=0;i
- {
- if(Image[i]>127) Image[i]=255;
- else Image[i]=0;
- }
- }
复制代码
对于使用windows 上的画图进行二值化后,也要使用RGBQUAD 结构,biBitCount 值是1 ;每一个像素对应于数据区的一位。但从ti的IMG 库中的函数源码可以看出,所需要的应该就是这样的。 对于IMG库函数的一个说明中可以看到,一个字节表示8个像素。
依然使用上几篇中的bmp结构体,另存图片查看结果。 此二值化对于bmp中的file、info等结构要对应二值化后的数据进行相应的修改,对数据区也肯定要修改的。 数据区的计算算法:第一行要四字节对齐。第一像素为字节高位。每位为1为白色,为0为黑色。第一像素还是左下角第一点。 程序如下: 程序通过判断每个像素点与阀值的大小,将一个8位像素点转为一位数据,每8个像素点转成一个字节的数据,最后更改bmp文件的file、info结构体,再存储下来。
上面两者的运行结果都是一样的,如最后的图片。
工程文件:
`
|