13:图像模糊处理

描述

给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:

1. 四周最外侧的像素点灰度值不变;

2. 中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。

输入

第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <= 100。
接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。输出n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。

输出

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
题意
给出一个矩阵各像素点的灰度值,处理成四周外侧像素点灰度值不变,中间各点的灰度值为其上下左右相邻四个像素点的平均值,四舍五入
思路
上下左右四边灰度值不变,对于元素a[i][j]在各位置时的条件:第1行i == 1,最后一行i == n,第1列j == 1,最后一列j == m。
对于不在上下左右四边的元素a[i][j],其上下左右位置的元素分别为:上a[i-1][j],下a[i+1][j],左a[i][j-1],右a[i][j+1]
将上下左右位置的元素和自身加起来,除以5,结果取四舍五入到整数,即为该点的灰度值。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m,a[101][101],b[101][101];
	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{
               double r=((double)a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5;
               b[i][j]=round(r);//中间位置的灰度值等于上下左右数字的平均
           }
        }
    }
	for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cout<<b[i][j]<<' ';//输出矩阵
        }
		cout<<endl;
      }
}
posted @   yyk666666  阅读(179)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示