【题目描述】
给定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>
#include <stdio.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
double A[101][101];
double sum;//和
double avg;
int B[101][101];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>A[i][j];//输入
}
}
for(int h=0;h<=n-1;h++)
{
for(int l=0;l<=m-1;l++)
{
if((l==0)||(h==0)||(h==n-1)||(l==m-1))
{
B[h][l]=int(A[h][l]);
}
else
{
B[h][l]=round((A[h-1][l]+A[h+1][l]+A[h][l-1]+A[h][l+1]+A[h][l])/5);
// avg=sum/5;
// B[h][l]=avg;
}
}
}
for(int a=0;a<n;a++)
{
for(int b=0;b<m;b++)
{
cout<<B[a][b]<<" ";
}
cout<<endl;
}
return 0;
}
四舍五入函数round()
使用方法:round(number,digits)
- digits>0,四舍五入到指定的小数位
- digits=0, 四舍五入到最接近的整数
- digits<0 ,在小数点左侧进行四舍五入
- 如果round()函数只有number这个参数,等同于digits=0
ROUND 函数将数字四舍五入到指定的位数。 例如,如果单元格 A1 包含 23.7825,而且您想要将此数值舍入到两个小数位数,可以使用以下公式:
=ROUND(A1, 2)
此函数的结果为 23.78。
另外输出可以用printf("%.0lf",B[a][b]);表示输出一个double类型的数且小数点为0位.
printf("%.xlf",B[a][b])表示输出的数小数点有x位;
一定要对应输出数据类型和符号,否则会出错