• 6:图像模糊处理(水题)


    点击打开链接


    描述

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









































    提交了好几次一直WA,看了别人的代码后也不知道是哪错了,估计是舍入那里出错了



    AC代码

    #include<stdio.h>  
    #include<iostream>  
    using namespace std;  
    int main()  
    {  
        int m,n,i,j=0;  
        double sum=0;  
        double a[105][105];  
        double b[105][105];  
        cin>>m>>n;  
        for(i=1;i<=m;i++){  
            for(j=1;j<=n;j++){  
                cin>>a[i][j];  
                b[i][j]=a[i][j];  
            }  
        }  
        for(i=1;i<=m;i++){  
            for(j=1;j<=n;j++){  
                if(i!=1 && j!=1 && i!=m && j!=n){  
                    sum=(a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j+1]+a[i][j-1])/5;  
                    sum=int(sum+0.5);  
                    b[i][j]=sum;  
                }  
            }  
        }  
        for(i=1;i<=m;i++){  
            for(j=1;j<=n;j++){  
            cout<<b[i][j]<<" ";  
            if(j==n){  
               printf("
    ");  
            }  
            }  
        }     
        return 0;  
    }  


    WA代码


    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    int main()
    {
    	int n,m;
    	int sum=0;
    	double a[200][200];
    	double b[200][200];
    	scanf("%d%d",&n,&m);
    	for(int i=0; i<n; i++)
    	for(int j=0; j<m; j++)
    	{
    		cin>>a[i][j];
    		b[i][j]=a[i][j];
    	}
    	for(int i=0; i<n; i++)
    	for(int j=0; j<m; j++)
    	{
    		if(i!=0&&j!=0&&i!=n-1&&j!=m-1)
    		{
    			sum=(a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5;
    			sum=int(sum+0.5);
    			b[i][j]=sum;		
    		}	
    	
    	}	
    	for(int i=0; i<n; i++)
    	for(int j=0; j<m; j++)
    	{
    		cout<<b[i][j]<<" ";
    		if(j==n)
    		printf("
    ");
    	 } 
    	return 0;
    }










    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    CLR的黑暗面——栈与引用对象
    delegate的另类玩法
    一个比较bt的xslt
    关于string
    jQuery核心讲解
    Linux环境进程间通信(二):信号(上)
    ubuntu10.10 轻松安装 Nvidia 官方驱动
    Linux环境进程间通信(二): 信号(下)
    Linux 信号signal处理机制
    java.lang.ProcessBuilder类和java.lang.Process类
  • 原文地址:https://www.cnblogs.com/h-hkai/p/7406492.html
Copyright © 2020-2023  润新知