用C语言对BMP图像进行二值化处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
# include
# include
# include
# include
# include
# include
# include
int bitmapToGray(char *OriginalBMP,char *ResultBMP);
int main()
{
bitmapToGray("E:\\xljFile\\pictureProcessing\\LONGJIANG.bmp",
"E:\\xljFile\\pictureProcessing\\LONGJIANG2.bmp");
return 0;
}
int bitmapToGray(char *OriginalBMP,char *ResultBMP)
{
unsigned char *BMP24Image,*BMP8Image;
BITMAPFILEHEADER fh;
BITMAPINFOHEADER ih;
// RGBQUAD Color[256];
// BYTE CTemp[3]; //颜色分量
int Row,Col,nCol;
int i,j,k;
FILE *f,*p;
BMP24Image=(unsigned char*)calloc(2000*2000,sizeof(unsigned char));
BMP8Image=(unsigned char*)calloc(1000*1000,sizeof(unsigned char));
if((f=fopen(OriginalBMP,"rb"))==NULL)
{
printf("open %s error,please check\n");
return 0;
}
fread(&fh,sizeof(BITMAPFILEHEADER),1,f);
if(fh.bfType!='MB')
{
printf("This is not a BMP picture\n");
return 0;
}
fh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
// +sizeof(RGBQUAD)*256;
fread(&ih,sizeof(BITMAPINFOHEADER),1,f);
Row=ih.biHeight;
Col=ih.biWidth;
Col=Col/4*4;
// nCol=Col*4/4*4; //扫描宽度
ih.biBitCount=8; //改变像素位数大小,8位,256色
fread(BMP24Image,sizeof(unsigned char),Row*Col,f);
for(i=0;i
if(BMP24Image[i*Col+j]>128)
BMP8Image[i*Col+j]=255;
else BMP8Image[i*Col+j]=100;
// for(k=0;k<3;k++)
// {
// CTemp[k]=BMP24Image[i*nCol+j*3+k];
// }
// BMP8Image[i*Col+j]=CTemp[2]*0.299+CTemp[1]*0.587+CTemp[0]*0.114;//转化公式
}
}
fclose(f);
if((p=fopen(ResultBMP,"wb"))==NULL)
{
printf("open savefile error\n");
return 0;
}
// for(i=0;i<256;i++) //调色板
// {
// Color[i].rgbBlue=i;
// Color[i].rgbGreen=i;
// Color[i].rgbRed=i;
// Color[i].rgbReserved=0;
// }
fwrite(&fh,sizeof(BITMAPFILEHEADER),1,p);
fwrite(&ih,sizeof(BITMAPINFOHEADER),1,p);
//fwrite(Color,sizeof(RGBQUAD),256,p);
fwrite(BMP8Image,sizeof(unsigned char),Row*Col,p);
fclose(p);
return 0;
}