搜索
您的当前位置:首页正文

图像模糊处理

来源:二三娱乐

描述:

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

C语言

#include <stdio.h>

int main(void)
{
    int n, m;
    scanf("%d %d", &n, &m);
    double new_arr[n][m];
    int old_arr[n][m];
    int i, j;
    for (i=0; i<n; i++){
        for (j=0; j<m; j++){
            scanf("%d", &old_arr[i][j]);
        }
    }
    
    int sum;
    for (i=0; i<n; i++){
        for (j=0; j<m; j++){
            // 最边缘的灰度不处理
            if (i==0 || i==n-1 || j==0 || j==m-1){
                new_arr[i][j] = old_arr[i][j];
            } else {
                sum = old_arr[i-1][j] + old_arr[i+1][j] + old_arr[i][j-1] + old_arr[i][j+1] + old_arr[i][j];
                new_arr[i][j] = sum/5.0;
            }
        }
    }
    
    for (i=0; i<n; i++){
        for (j=0; j<m; j++){
            printf("%.0f%c", new_arr[i][j], j==m-1?'\n':' ');   // 浮点数会自动的四舍五入
        }
    }
    
    return 0;
}
Top