描述
给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
四周最外侧的像素点灰度值不变;
中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。
四舍五入的函数:round(x),返回x四舍五入后的值
输入描述
第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <= 100。
接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。
输出描述
n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include<iostream> #include<cmath> using namespace std;
int main() { int n, m; cin >> n >> m; int in[n][m]; double ans[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> in[i][j]; if (i == n - 1 || i == 0 || j == 0 || j == m - 1) { ans[i][j] = in[i][j]; } } } for (int i = 1; i < n - 1; i++) { for (int j = 1; j < m - 1; j++) { ans[i][j] = (in[i][j] + in[i - 1][j] + in[i + 1][j] + in[i][j - 1] + in[i][j + 1]) / 5.0; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << round(ans[i][j]) << " "; } cout << endl; } return 0; }
|