A24153. 图像模糊处理
填空题
中等
知识点
题目描述
图像模糊处理
题目描述
给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
1.四周最外侧的像素点灰度值不变;
2.中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。
输入
第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤100。
接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0∼255之间。
输出
n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。
输入样例
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<bits/stdc++.h>
using namespace std;
#define N 105
int main()
{
int n, m, a[N][N], b[N][N];
cin>>n>>m;
for(int i = 1; i <= n; ++i)//输入矩阵
for(int j = 1; j <= m; ++j)
cin >> a[i][j];
for(int i = 1; i <= n; ++i)
for(int 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((double)(a[i-1][j] + a[i+1][j] + a[i][j-1] + a[i][j+1] + a[i][j]) / 5);//中心的位置灰度值是上下左右中数字的平均
}
for(int i = 1; i <= n; ++i)//输出矩阵
{
for(int j = 1; j <= m; ++j)
cout << b[i][j] << ' ';
cout << endl;
}
return 0;
}
上一题
下一题