1128:图像模糊处理(round函数(四舍五入化整))

泪湿孤枕 提交于 2019-12-14 19:57:27

【题目描述】

给定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>
using namespace std;
int i,j,k;
#define A 100+5
int main()
{
    int a[A][A];
    double b[A][A];
    int m,n;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cin>>a[i][j];
            }
        }
    for(i=1;i<=n;i++)
    {
        for(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((a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5.0);
            }//round四舍五入化整
        }
/*for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(i!=0&&j!=0&&i!=n-1&&j!=m-1)// 非 或 即为 且(易错)
            b[i][j]=round((a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1]+a[i][j])/5.0);
            else
            b[i][j]=a[i][j];
        }
        }
*/
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cout<<b[i][j]<<" ";
            }
            cout<<endl;
        }
    return 0;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!