1128:图像模糊处理时间限制: 1000 ms 内存限制: 65536 KB 提交数: 33015 通过数: 14191 【题目描述】给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理: 1.四周最外侧的像素点灰度值不变; 2.中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。 【输入】第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤100。 接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0∼255之间。 【输出】n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。 |
分析:
1.可以直接输出题目要求的数组,也可以创建一个新的数组装结果,在将结果输出;
2.四舍五入:(int)(num*1.0+0.5);利用数据类型的特点(double类转int时会舍去小数)进行四舍五入。
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int n, m;
cin >> n >> m ;
double a[100][100];
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
cin >> a[i][j];
}
}
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
if (i == 0||i==n-1||j==0||j==m-1)
{
cout << a[i][j] << " ";
}
else
{
cout << int((((a[i][j] + a[i + 1][j] + a[i - 1][j] + a[i][j + 1] + a[i][j - 1])) / 5) + 0.5)<<" ";
}
}
cout << endl;
}
}