描述
给定m行n列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
1.四周最外侧的像素点灰度值不变;
2.中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)
输入
第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤100。接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。
输出
m行,每行n个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。(行尾没有多余的空格)
输入样例 1
4 5 100 0 100 0 50 50 100 200 0 0 50 50 100 100 200 100 100 50 50 100
输出样例 1
100 0 100 0 50 50 80 100 60 0 50 80 100 90 200 100 100 50 50 100
这道题用到二维数组,乍一看很难,但其实也没有多难。
代码:
1 #include<iostream> 2 #include<bits/stdc++.h> 3 using namespace std; 4 int main() 5 { 6 int n,m; 7 cin>>n>>m; //输入行数和列数 8 float a[n+1][m+1],b[n+1][m+1]; //定义二维数组 9 for(int i=1;i<=n;i++) 10 { 11 for(int j=1;j<=m;j++) 12 { 13 cin>>a[i][j]; //输入二维数组 14 b[i][j]=a[i][j]; //这个数组用来计算输出 15 } 16 } 17 for(int i=2;i<n;i++) 18 { 19 for(int j=2;j<m;j++) 20 { 21 b[i][j]=(a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1]+a[i][j])/5; //模糊处理 22 } 23 } 24 for(int i=1;i<=n;i++) 25 { 26 for(int j=1;j<m;j++) 27 { 28 cout<<fixed<<setprecision(0)<<b[i][j]<<" "; //行尾无空格输出 29 } 30 cout<<fixed<<setprecision(0)<<b[i][m]<<endl; 31 } 32 return 0; 33 }