用C++写一个二值化图片的程序
时间: 2023-05-27 11:06:07 浏览: 137
以下是一个基本的二值化图片程序,它将灰度图像转换为黑白图像:
```
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
int width, height, max_gray, i, j;
unsigned char *img, *out_img;
// 打开灰度图像文件
fp = fopen("gray_image.pgm", "rb");
if(fp == NULL)
{
printf("Error: Unable to open file\n");
exit(1);
}
// 读取P5格式灰度图像文件头信息
fscanf(fp, "P5\n%d %d\n%d\n", &width, &height, &max_gray);
// 分配内存空间
img = (unsigned char*)malloc(width*height*sizeof(unsigned char));
out_img = (unsigned char*)malloc(width*height*sizeof(unsigned char));
// 读取灰度图像数据
fread(img, sizeof(unsigned char), width*height, fp);
// 关闭灰度图像文件
fclose(fp);
// 二值化处理
for(i=0; i<width*height; i++)
{
if(img[i] > 128)
out_img[i] = 255; // 白色
else
out_img[i] = 0; // 黑色
}
// 打开黑白图像文件
fp = fopen("binary_image.pgm", "wb");
if(fp == NULL)
{
printf("Error: Unable to create file\n");
exit(1);
}
// 写入P5格式黑白图像文件头信息
fprintf(fp, "P5\n%d %d\n%d\n", width, height, 255);
// 写入黑白图像数据
fwrite(out_img, sizeof(unsigned char), width*height, fp);
// 关闭黑白图像文件
fclose(fp);
// 释放内存空间
free(img);
free(out_img);
return 0;
}
```
注意:这里假设输入的灰度图像文件格式是P5格式,输出的黑白图像文件格式也是P5格式。如果需要处理其他格式的图像文件,需要先了解该格式的文件头信息和数据格式。
阅读全文