c语言线性拉伸0到255,数字图像处理作业题.doc
时间: 2024-05-12 19:15:43 浏览: 83
线性拉伸是一种简单的灰度级映射方法,它可以将图像的灰度值范围映射到0到255之间,从而增强图像的对比度和亮度。
下面是一个简单的C语言程序,可以实现对图像进行线性拉伸:
```c
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 512
#define HEIGHT 512
int main()
{
FILE *fp_in, *fp_out;
unsigned char img_in[WIDTH][HEIGHT], img_out[WIDTH][HEIGHT];
int i, j, min_val, max_val;
// 打开输入图像文件
if ((fp_in = fopen("input.raw", "rb")) == NULL)
{
printf("Cannot open file: input.raw!\n");
return 1;
}
// 读取输入图像数据
fread(img_in, sizeof(unsigned char), WIDTH * HEIGHT, fp_in);
// 关闭输入图像文件
fclose(fp_in);
// 找到图像的最小和最大灰度值
min_val = img_in[0][0];
max_val = img_in[0][0];
for (i = 0; i < WIDTH; i++)
{
for (j = 0; j < HEIGHT; j++)
{
if (img_in[i][j] < min_val)
min_val = img_in[i][j];
if (img_in[i][j] > max_val)
max_val = img_in[i][j];
}
}
// 进行线性拉伸
for (i = 0; i < WIDTH; i++)
{
for (j = 0; j < HEIGHT; j++)
{
img_out[i][j] = (unsigned char)((img_in[i][j] - min_val) * 255.0 / (max_val - min_val));
}
}
// 打开输出图像文件
if ((fp_out = fopen("output.raw", "wb")) == NULL)
{
printf("Cannot open file: output.raw!\n");
return 1;
}
// 写入输出图像数据
fwrite(img_out, sizeof(unsigned char), WIDTH * HEIGHT, fp_out);
// 关闭输出图像文件
fclose(fp_out);
return 0;
}
```
在上面的程序中,我们首先打开输入图像文件,并读取输入图像数据。然后我们找到图像的最小和最大灰度值,用它们来进行线性拉伸。最后,我们打开输出图像文件,并将处理后的图像数据写入其中。
需要注意的是,这个程序假设输入图像是512x512大小的灰度图像。如果你的输入图像大小不同,你需要相应地修改程序中的宏定义。另外,这个程序只能处理8位灰度图像,如果你的图像是彩色图像或其他类型的图像,你需要先将其转换为灰度图像。
阅读全文