版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengxianghui01/article/details/85081395
原理很简单,小于阈值T赋值0,大于阈值T赋值255;
#include<stdio.h>
#include<windows.h>
int main(int argc, char* argv[])
{
int bmpHeight;
int bmpWidth;
unsigned char *pBmpBuf;
RGBQUAD *pColorTable;
int biBitCount;
//读取bmp文件
FILE *fp = fopen("./01.bmp", "rb");
if (fp == 0)
return 0;
BITMAPFILEHEADER fileHead;
fread(&fileHead, sizeof(BITMAPFILEHEADER), 1, fp);
BITMAPINFOHEADER head;
fread(&head, 40, 1, fp);
bmpHeight = head.biHeight;
bmpWidth = head.biWidth;
biBitCount = head.biBitCount;
pColorTable = new RGBQUAD[256];
fread(pColorTable, sizeof(RGBQUAD), 256, fp);
int LineByte = (bmpWidth*biBitCount / 8 + 3) / 4 * 4;//保证每一行字节数都为4的整数倍
pBmpBuf = new unsigned char[LineByte*bmpHeight];
fread(pBmpBuf, LineByte*bmpHeight, 1, fp);
fclose(fp);
FILE* fop = fopen("./threshold.bmp", "wb");
fwrite(&fileHead, sizeof(BITMAPFILEHEADER), 1, fop);
fwrite(&head, sizeof(BITMAPINFOHEADER), 1, fop);
fwrite(pColorTable, sizeof(RGBQUAD), 256, fop);
for (int i = 0; i < bmpHeight; ++i){
for (int j = 0; j < bmpWidth; ++j){
if (*(pBmpBuf + i*LineByte + j)>110){
*(pBmpBuf + i*LineByte + j) = 255;
}
else{
*(pBmpBuf + i*LineByte + j) = 0;
}
}
}
fwrite(pBmpBuf, LineByte*bmpHeight, 1, fop);
fclose(fop);
system("pause");
return 0;
}
实验结果:
原图 结果图
实验结果分析:跟MATLAB同样,但实际结果并不是0和1的二值图像,而是0和255的二值图像。
后续持续更新用C语言实现图像处理算法,敬请期待,欢迎关注。