用c语言写一个图像均值滤波的函数
时间: 2024-05-11 21:19:29 浏览: 101
下面是一个简单的 C 语言程序,可以实现图像的均值滤波:
```c
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 640 // 图像宽度
#define HEIGHT 480 // 图像高度
// 读取图像数据
void read_image(unsigned char *data)
{
FILE *fp;
fp = fopen("image.raw", "rb");
fread(data, 1, WIDTH*HEIGHT, fp);
fclose(fp);
}
// 保存图像数据
void save_image(unsigned char *data)
{
FILE *fp;
fp = fopen("image_filtered.raw", "wb");
fwrite(data, 1, WIDTH*HEIGHT, fp);
fclose(fp);
}
// 均值滤波
void mean_filter(unsigned char *src, unsigned char *dst)
{
int i, j, k, l;
int sum;
for(i = 1; i < HEIGHT-1; i++) {
for(j = 1; j < WIDTH-1; j++) {
sum = 0;
for(k = -1; k <= 1; k++) {
for(l = -1; l <= 1; l++) {
sum += src[(i+k)*WIDTH+j+l];
}
}
dst[i*WIDTH+j] = (unsigned char)(sum/9);
}
}
}
int main()
{
unsigned char *image = (unsigned char *)malloc(WIDTH*HEIGHT);
unsigned char *filtered_image = (unsigned char *)malloc(WIDTH*HEIGHT);
// 读取图像数据
read_image(image);
// 均值滤波
mean_filter(image, filtered_image);
// 保存滤波后的图像数据
save_image(filtered_image);
free(image);
free(filtered_image);
return 0;
}
```
上面的程序中,`read_image` 函数从文件中读取图像数据,`mean_filter` 函数对图像进行均值滤波,`save_image` 函数将滤波后的图像数据保存到文件中。程序中使用了一个 `unsigned char` 类型的数组来存储图像数据,数组大小为图像宽度乘以高度。在均值滤波函数中,使用了一个 3x3 的卷积核,对每个像素点取周围 9 个像素点的平均值作为该像素点的值。
阅读全文