C语言对图像进行均值滤波
时间: 2023-05-31 10:04:58 浏览: 83
以下是C语言对图像进行均值滤波的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 256
#define HEIGHT 256
int main() {
FILE *fp_in, *fp_out;
unsigned char img_in[WIDTH][HEIGHT];
unsigned char img_out[WIDTH][HEIGHT];
int i, j, k, l;
int sum, count;
float avg;
// 读取原始图像数据
if ((fp_in = fopen("lena.raw", "rb")) == NULL) {
printf("Cannot open file: lena.raw\n");
exit(1);
}
fread(img_in, sizeof(unsigned char), WIDTH * HEIGHT, fp_in);
fclose(fp_in);
// 对图像进行均值滤波
for (i = 0; i < WIDTH; i++) {
for (j = 0; j < HEIGHT; j++) {
sum = 0;
count = 0;
for (k = -1; k <= 1; k++) {
for (l = -1; l <= 1; l++) {
if (i + k >= 0 && i + k < WIDTH && j + l >= 0 && j + l < HEIGHT) {
sum += img_in[i + k][j + l];
count++;
}
}
}
avg = (float)sum / count;
img_out[i][j] = (unsigned char)avg;
}
}
// 将处理后的图像数据保存到文件中
if ((fp_out = fopen("lena_blur.raw", "wb")) == NULL) {
printf("Cannot open file: lena_blur.raw\n");
exit(1);
}
fwrite(img_out, sizeof(unsigned char), WIDTH * HEIGHT, fp_out);
fclose(fp_out);
return 0;
}
```
以上代码中,我们首先读取了原始图像数据,然后对每个像素进行了3x3的均值滤波,最后将处理后的图像数据保存到文件中。
注:以上示例代码仅供参考,实际应用中可能需要根据具体情况进行调整。
阅读全文