3 Star 14 Fork 6

徒步天下 / 程序设计与算法一OpenJudge题解

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
033:图像模糊处理.md 1.94 KB
一键复制 编辑 原始数据 按行查看 历史
徒步天下 提交于 2017-09-14 10:50 . 新建 033:图像模糊处理.md

033:图像模糊处理

总时间限制: 1000ms 内存限制: 65536kB

描述

给定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

全局题号

8167

题解

#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
    int a[100][100], b[100][100], n, m; //a为原始数组,b为新数组

    // 读入原始数组
    cin >> n >>m;
    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++)
    {
        b[i][0]=a[i][0];
        b[i][m-1]=a[i][m-1];
    }
    for (int j=0;j<m;j++)
    {
        b[0][j]=a[0][j];
        b[n-1][j]=a[n-1][j];
    }
    
    // 计算新数组
    for (int i=1;i<n-1;i++)
        for (int j=1;j<m-1;j++)
        {
            b[i][j]=(int)((a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5.0+0.5); //四舍五入的写法
        }
    
    // 输出
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<m-1;j++)
            printf("%d ", b[i][j]);
        printf("%d\n", b[i][m-1]);
    }

    return 0;
}
C++
1
https://gitee.com/se17a/c01.git
git@gitee.com:se17a/c01.git
se17a
c01
程序设计与算法一OpenJudge题解
master

搜索帮助