我正在编写一个使用均值滤波器来平滑图像的程序。现在我没有使用实际的图像,只是整数,我的问题是我可以获得左角数字的平均值,左侧数字的平均值以及中间数字的平均值,但是当它输出结果时,它不会输出回矩阵。
前任。要求用户输入行和列的数字:输入为 5 和 5,输出 5x5 矩阵
但是然后我以从上到下的方式获得平均值的这些结果
50
50
71
65
61
48 64 57
59 26 61
43 63 20
我想要实现的输出是
50
71 48 64 57
65 59 26 61
61 43 63 20
显然这不是一个成品,因为我还没有为矩阵的其余部分编程平均值,但是这个格式问题让我发疯了。
继承人的代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
// function that randomly generates numbers
void fillArray(int a[10][20], int m, int n)
{
int random;
int i,j;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
random=rand()%100;
a[i][j]=random;
}
}
}
// function that prints the first matrix of random numbers
void printarray (int a[10][20], int m, int n)
{
int i,j;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
}
// function that finds the mean for any number and its 4 nieghbors
void corner1 (int a[10][20], int n, int m)
{
int c[10][20];
int i,j;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
if (i<=0 && j<=0)
{
c[i][j]=(a[i+1][j]+a[i][j+1])/2;
printf("%4d",c[i][j]);
}
}
}
printf("\n");
}
void middle(int a[10][20], int n, int m)
{
int c[10][20];
int i,j;
for (i=1;i<m-1;i++)
{
for (j=1;j<n-1;j++)
{
c[i][j]=(a[i-1][j]+a[i][j-1]+a[i+1][j]+a[i][j+1])/4;
printf("%4d",c[i][j]);
}
printf("\n");
}
}
void side1 (int a[10][20], int n, int m)
{
int c[10][20];
int i,j;
for (i=1;i<m;i++)
{
for (j=0;j<n-1;j++)
{
if (i<=1&&j>=0)
{
c[i][j]=(0+0+a[i-1][j]+a[i+1][j]+a[i][j+1])/3;
printf("%4d",c[i][j]);
printf("\n");
}
}
}
}
int main()
{
int a[10][20];
int m,n;
srand(time(NULL));
//User input
printf("please enter number of rows and columns\n");
scanf("%d %d", &m,&n);
fillArray(a,m,n);
printarray (a,m,n);
printf("The smoothed image is\n");
side1(a,m,n);
corner1(a,m,n);
middle (a,m,n);
getch();
return 0;
}