NOI / 1.8编程基础之多维数组

发布时间 2023-05-07 19:38:31作者: 时66

13:图像模糊处理

 1.描述

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

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

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

2.输入

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

3.输出

  n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开

4. 样例输入

4 5
100 0 100 0 50
50 100 200 0 0
50 50 100 100 200
100 100 50 50 100

5.样例输出

100 0 100 0 50
50 80 100 60 0
50 80 100 90 200
100 100 50 50 100

6.题意

 模糊化处理给定n行m列的图像各像素点的灰度值

7.思路

四周最外侧的像素点直接输出,中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均。

8.代码实现

#include<bits/stdc++.h>
using namespace std;
int main(){
	int m,n,j=0,i;
	double sum=0;
	double a[105][105];
	cin>>m>>n;
	for(i=1;i<=m;i++){
		for(j=1;j<=n;j++){
			cin>>a[i][j];//四周最外侧的像素点直接输出
		}
	}
	for(i=1;i<=m;i++){
			for(j=1;j<=n;j++){
				if(i==1||j==1||i==m||j==n){
					cout<<a[i][j]<<" ";
				}
		 		else{
					sum=(a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j+1]+a[i][j-1])/5;//中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均
					cout<<int(sum+0.5)<<" ";//舍入到最接近的整数	
				}
			}
		cout<<endl;
	}
	return 0;
}