信息学奥赛 1128:图像模糊处理

【题目描述】

给定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>
#include <stdio.h> 
using namespace std;
int main()
{
    
    int n,m;
    cin>>n>>m;
	double A[101][101];
	
	double sum;//和
	double avg;

	
	int B[101][101];
	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>A[i][j];//输入 
			
		}
	 } 
	 
	 
	 for(int h=0;h<=n-1;h++)
	 {
	 	for(int l=0;l<=m-1;l++)
	 	{
	 		if((l==0)||(h==0)||(h==n-1)||(l==m-1))
	 		{
			 B[h][l]=int(A[h][l]);
			 }
	 		
	 		else
	 		{
	 		B[h][l]=round((A[h-1][l]+A[h+1][l]+A[h][l-1]+A[h][l+1]+A[h][l])/5);
//	 		avg=sum/5;
//	 		B[h][l]=avg;

	        }
	   } 
	 }
	 
	 for(int a=0;a<n;a++)
	 {
	 	for(int b=0;b<m;b++)
	 	{
	 		cout<<B[a][b]<<" ";
		 }
		 cout<<endl;
	 }
	 
	  
    return 0; 
}

四舍五入函数round()

使用方法:round(number,digits)

  1. digits>0,四舍五入到指定的小数位
  2. digits=0, 四舍五入到最接近的整数
  3. digits<0 ,在小数点左侧进行四舍五入
  4. 如果round()函数只有number这个参数,等同于digits=0

ROUND 函数将数字四舍五入到指定的位数。 例如,如果单元格 A1 包含 23.7825,而且您想要将此数值舍入到两个小数位数,可以使用以下公式:

=ROUND(A1, 2)

此函数的结果为 23.78。

另外输出可以用printf("%.0lf",B[a][b]);表示输出一个double类型的数且小数点为0位.

printf("%.xlf",B[a][b])表示输出的数小数点有x位;

一定要对应输出数据类型和符号,否则会出错

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值