c语言图片灰度化
时间: 2023-07-02 20:11:16 浏览: 94
一个图像灰度化c程序
4星 · 用户满意度95%
以下是使用C语言将图片灰度化的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BMP_HEADER_SIZE 54
int main()
{
FILE *input_file = fopen("input.bmp", "rb");
FILE *output_file = fopen("output.bmp", "wb");
if (input_file == NULL || output_file == NULL)
{
printf("Error opening files!\n");
return -1;
}
// 读取 BMP 文件头信息
unsigned char bmp_header[BMP_HEADER_SIZE];
fread(bmp_header, sizeof(unsigned char), BMP_HEADER_SIZE, input_file);
// 获取图像宽度、高度和每个像素占用的字节数
int width = *(int *)&bmp_header[18];
int height = *(int *)&bmp_header[22];
int bytes_per_pixel = *(short *)&bmp_header[28] / 8;
// 分配内存来存储像素值
unsigned char *pixels = (unsigned char *)malloc(width * height * bytes_per_pixel);
// 读取像素值
fread(pixels, sizeof(unsigned char), width * height * bytes_per_pixel, input_file);
// 灰度化处理
for (int i = 0; i < width * height; i++)
{
unsigned char gray_value = 0;
// 计算灰度值
for (int j = 0; j < bytes_per_pixel; j++)
{
gray_value += pixels[i * bytes_per_pixel + j];
}
gray_value /= bytes_per_pixel;
// 将像素值替换为灰度值
for (int j = 0; j < bytes_per_pixel; j++)
{
pixels[i * bytes_per_pixel + j] = gray_value;
}
}
// 写入 BMP 文件头信息
fwrite(bmp_header, sizeof(unsigned char), BMP_HEADER_SIZE, output_file);
// 写入像素值
fwrite(pixels, sizeof(unsigned char), width * height * bytes_per_pixel, output_file);
// 释放内存
free(pixels);
// 关闭文件
fclose(input_file);
fclose(output_file);
return 0;
}
```
上述代码将 BMP 格式的图片文件 `input.bmp` 灰度化,并将结果保存在 `output.bmp` 文件中。其中,图片文件头信息的大小为 54 字节,包含图像宽度、高度和每个像素占用的字节数等信息。灰度化处理是通过计算每个像素值的 RGB 分量的平均值来实现的。最后,将处理后的像素值写回到输出文件中即可。
阅读全文