1. 程式人生 > >6:影象模糊處理(水題)

6:影象模糊處理(水題)

描述

給定n行m列的影象各畫素點的灰度值,要求用如下方法對其進行模糊化處理:

1. 四周最外側的畫素點灰度值不變;

2. 中間各畫素點新灰度值為該畫素點及其上下左右相鄰四個畫素點原灰度值的平均(舍入到最接近的整數)。

輸入
第一行包含兩個整數n和m,表示影象包含畫素點的行數和列數。1 <= n <= 100,1 <= m <= 100。
接下來n行,每行m個整數,表示影象的每個畫素點灰度。相鄰兩個整數之間用單個空格隔開,每個元素均在0~255之間。
輸出
n行,每行m個整數,為模糊處理後的影象。相鄰兩個整數之間用單個空格隔開。
樣例輸入
4 5
100 0 100 0 50
50 100 200 0 0
50 50 100 100 200
100 100 50 50 100
樣例輸出
100 0 100 0 50
50 80 100 60 0
50 80 100 90 200
100 100 50 50 100

提交了好幾次一直WA,看了別人的程式碼後也不知道是哪錯了,估計是舍入那裡出錯了

AC程式碼

#include<stdio.h>  
#include<iostream>  
using namespace std;  
int main()  
{  
    int m,n,i,j=0;  
    double sum=0;  
    double a[105][105
]; double b[105][105]; cin>>m>>n; for(i=1;i<=m;i++){ for(j=1;j<=n;j++){ cin>>a[i][j]; b[i][j]=a[i][j]; } } for(i=1;i<=m;i++){ for(j=1;j<=n;j++){ if(i!=1 && j!=1 &&
i!=m && j!=n){ sum=(a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j+1]+a[i][j-1])/5; sum=int(sum+0.5); b[i][j]=sum; } } } for(i=1;i<=m;i++){ for(j=1;j<=n;j++){ cout<<b[i][j]<<" "; if(j==n){ printf("\n"); } } } return 0; }

WA程式碼

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
	int n,m;
	int sum=0;
	double a[200][200];
	double b[200][200];
	scanf("%d%d",&n,&m);
	for(int i=0; i<n; i++)
	for(int j=0; j<m; j++)
	{
		cin>>a[i][j];
		b[i][j]=a[i][j];
	}
	for(int i=0; i<n; i++)
	for(int j=0; j<m; j++)
	{
		if(i!=0&&j!=0&&i!=n-1&&j!=m-1)
		{
			sum=(a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5;
			sum=int(sum+0.5);
			b[i][j]=sum;		
		}	
	
	}	
	for(int i=0; i<n; i++)
	for(int j=0; j<m; j++)
	{
		cout<<b[i][j]<<" ";
		if(j==n)
		printf("\n");
	 } 
	return 0;
}