用c++写一个图像滤波
时间: 2024-02-18 13:29:08 浏览: 58
以下是一个简单的图像平滑滤波器的C代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 256
#define HEIGHT 256
void filter(unsigned char *inputImage, unsigned char *outputImage)
{
int i, j;
for (i = 1; i < HEIGHT - 1; i++) {
for (j = 1; j < WIDTH - 1; j++) {
int sum = 0;
int k, l;
for (k = -1; k <= 1; k++) {
for (l = -1; l <= 1; l++) {
sum += inputImage[(i + k) * WIDTH + (j + l)];
}
}
outputImage[i * WIDTH + j] = sum / 9;
}
}
}
int main(int argc, char **argv)
{
FILE *fin, *fout;
unsigned char *inputImage, *outputImage;
inputImage = (unsigned char *)malloc(WIDTH * HEIGHT * sizeof(unsigned char));
outputImage = (unsigned char *)malloc(WIDTH * HEIGHT * sizeof(unsigned char));
fin = fopen("input.raw", "rb");
fread(inputImage, sizeof(unsigned char), WIDTH * HEIGHT, fin);
fclose(fin);
filter(inputImage, outputImage);
fout = fopen("output.raw", "wb");
fwrite(outputImage, sizeof(unsigned char), WIDTH * HEIGHT, fout);
fclose(fout);
free(inputImage);
free(outputImage);
return 0;
}
```
这个代码实现了一个简单的3x3平均滤波器,它对输入图像进行平滑处理,并将结果写入输出图像。输入和输出图像都是以RAW格式存储的,它们的大小为256x256。在这个实现中,我们使用了两个循环来遍历输入图像的每个像素。对于每个像素,我们计算其周围3x3邻域内像素的平均值,并将结果写入输出图像中。
请注意,这个代码是一个非常简单的示例,也没有进行任何优化。在实际应用中,您可能需要使用更复杂的滤波器,并采用更高效的算法来处理图像。
阅读全文