用c语言写一个图像卷积的程序
时间: 2023-11-11 11:05:06 浏览: 207
以下是一个简单的图像卷积程序示例,使用C语言编写:
```c
#include <stdio.h>
#define WIDTH 5
#define HEIGHT 5
// 定义卷积核
int kernel[3][3] = {
{1, 1, 1},
{1, 0, 1},
{1, 1, 1}
};
void convolve(int input[][WIDTH], int output[][WIDTH])
{
int i, j, m, n;
int sum;
for (i = 1; i < HEIGHT - 1; i++) {
for (j = 1; j < WIDTH - 1; j++) {
sum = 0;
for (m = 0; m < 3; m++) {
for (n = 0; n < 3; n++) {
sum += input[i + m - 1][j + n - 1] * kernel[m][n];
}
}
output[i][j] = sum;
}
}
}
void print_image(int image[][WIDTH])
{
int i, j;
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
printf("%d ", image[i][j]);
}
printf("\n");
}
}
int main()
{
int input_image[HEIGHT][WIDTH] = {
{0, 0, 0, 0, 0},
{0, 255, 255, 255, 0},
{0, 255, 255, 255, 0},
{0, 255, 255, 255, 0},
{0, 0, 0, 0, 0},
};
int output_image[HEIGHT][WIDTH] = {0};
convolve(input_image, output_image);
printf("Input image:\n");
print_image(input_image);
printf("\nOutput image:\n");
print_image(output_image);
return 0;
}
```
这个程序使用一个3x3的卷积核来对一个5x5的图像进行卷积操作。在`convolve`函数中,我们使用嵌套的循环遍历输入图像的每个像素,并对每个像素应用卷积核。卷积核中的每个元素都与输入图像中的一个像素相乘,然后将乘积相加得到输出图像中的像素值。
在这个程序中,我们使用了两个二维数组来表示输入图像和输出图像。`print_image`函数用于打印二维数组中的内容。
在`main`函数中,我们定义了一个简单的5x5图像,并将其输入到`convolve`函数中。最后,我们打印了输入图像和输出图像,以便查看卷积操作的效果。
阅读全文