【题目描述】
给定nn行mm列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
1.四周最外侧的像素点灰度值不变;
2.中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。
【输入】
第一行包含两个整数nn和mm,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤1001≤n≤100,1≤m≤100。
接下来nn行,每行mm个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0∼2550∼255之间。
【输出】
nn行,每行mm个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。
【输入样例】
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
#include <iostream>
#include <cmath>
using namespace std;
int i,j,k;
#define A 100+5
int main()
{
int a[A][A];
double b[A][A];
int m,n;
cin>>n>>m;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(i==1||i==n||j==1||j==m)
b[i][j]=a[i][j];
else
b[i][j]=round((a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5.0);
}//round四舍五入化整
}
/*for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(i!=0&&j!=0&&i!=n-1&&j!=m-1)// 非 或 即为 且(易错)
b[i][j]=round((a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1]+a[i][j])/5.0);
else
b[i][j]=a[i][j];
}
}
*/
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
来源:CSDN
作者:C_Dreamy
链接:https://blog.csdn.net/C_Dreamy/article/details/103541999