用C语言写一个均值滤波,并输出最大最小值
时间: 2024-03-16 18:41:02 浏览: 14
下面是用C语言实现的均值滤波并输出最大最小值的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 5
#define HEIGHT 5
void mean_filter(int* img, int* out)
{
int i, j, k, l, cnt, sum;
int kernel[3][3] = {{1,1,1},{1,1,1},{1,1,1}};
for (i = 1; i < HEIGHT - 1; i++)
{
for (j = 1; j < WIDTH - 1; j++)
{
cnt = 0;
sum = 0;
for (k = -1; k <= 1; k++)
{
for (l = -1; l <= 1; l++)
{
sum += img[(i + k) * WIDTH + (j + l)] * kernel[k + 1][l + 1];
cnt++;
}
}
out[i * WIDTH + j] = sum / cnt;
}
}
}
int main()
{
int img[WIDTH * HEIGHT] = {1, 2, 3, 4, 5,
6, 7, 8, 9, 10,
11, 12, 13, 14, 15,
16, 17, 18, 19, 20,
21, 22, 23, 24, 25};
int out[WIDTH * HEIGHT] = {0};
int max_val = 0, min_val = 255;
mean_filter(img, out);
for (int i = 0; i < HEIGHT; i++)
{
for (int j = 0; j < WIDTH; j++)
{
if (out[i * WIDTH + j] > max_val) max_val = out[i * WIDTH + j];
if (out[i * WIDTH + j] < min_val) min_val = out[i * WIDTH + j];
printf("%d ", out[i * WIDTH + j]);
}
printf("\n");
}
printf("Max value: %d\n", max_val);
printf("Min value: %d\n", min_val);
return 0;
}
```
这里和之前的代码类似,使用了一个 3x3 的均值滤波模板,对于每个像素,将其周围的 3x3 区域内的像素值加起来,然后求平均值作为输出像素的值。同时,在输出结果时,遍历输出数组并记录最大值和最小值,最后输出结果。