信息学奥赛一本通(c++):1128:图像模糊处理
一、题目
1128:图像模糊处理
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
给定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
二、思路
1.定义一个新二维数组存放数据 在输入数据的时候同时初始化新数组的四周
2.直接遍历新数组 同时计算平均值即可
三、代码
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a[n][m];
double b[n][m];
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
cin>>a[i][j];
if(i==n-1||i==0||j==0||j==m-1)
{
b[i][j]=a[i][j];
}
}
}
for(int i=1; i<n-1; i++)
{
for(int j=1; j<m-1; j++)
{
b[i][j]=(a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5.0;
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
cout<<round(b[i][j])<<" ";
}
cout<<endl;
}
return 0;
}
C++实现图像模糊处理:1128竞赛题解析
本文解析了信息学奥赛中的图像模糊处理问题,介绍了如何用C++编程实现,涉及四周像素保持不变,中间像素通过四邻域灰度值平均计算。详细步骤包括读取输入、创建新数组初始化边界、计算并输出模糊后的图像。
1812

被折叠的 条评论
为什么被折叠?



