【Leetcode刷题第五天】661. 图片平滑器[JAVA]

【Leetcode刷题第五天】661. 图片平滑器[JAVA] 大家一起来刷题吧~

题目描述:
图像平滑器 是大小为 3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。

每个单元格的 平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。

如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值)

给你一个表示图像灰度的 m x n 整数矩阵 img ,返回对图像的每个单元格平滑处理后的图像 。

示例 1:

输入:img = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[0, 0, 0],[0, 0, 0], [0, 0, 0]]
在这里插入图片描述

示例 2:
在这里插入图片描述

输入: img = [[100,200,100],[200,50,200],[100,200,100]]
输出: [[137,141,137],[141,138,141],[137,141,137]]

下面画图来解释一下:
在这里插入图片描述
以每个小方块为中心构造九宫格,超出原本九宫格的范围不记(即为0),只计算在原本九宫格的平均值。例如在第一张图中,sum/4 。第二张图中,sum/6。以此类推~

代码如下:

class Solution {
    
    
    public int[][] imageSmoother(int[][] img) {
    
    
        int m=img.length;
        int n=img[0].length;
        int ret[][]=new int[m][n];
        for(int i=0;i<m;i++){
    
    
            for(int j=0;j<n;j++){
    
    
                int sum=0;
                int s=0;
                for(int x=i-1;x<=i+1;x++){
    
    
                    for(int y=j-1;y<=j+1;y++){
    
    
                        if(x>=0&&y>=0&&x<m&&y<n){
    
    
                            sum+=img[x][y];
                            s++;
                        }
                    }
                }
                ret[i][j]=sum/s;
            }
        }
        return ret;
    }
}

总结:
可以自己多动手画一下图,思路会更清晰~

扫描二维码关注公众号,回复: 14644318 查看本文章

猜你喜欢

转载自blog.csdn.net/m0_52338896/article/details/123714743