图片平滑器
图像平滑器 是大小为 3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。
每个单元格的 平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。
如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值)。给你一个表示图像灰度的 m x n
整数矩阵 img
,返回对图像的每个单元格平滑处理后的图像 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/set-mismatch
题解:
遍历矩阵,依次计算每个位置的平均灰度,首先写一个双层循环用来遍历矩阵的每个位置,然后对于每个位置都要计算它的平均灰度值,还要有一个双层循环,但该循环中需要判断有些位置是否存在,用num用来记录存在的位置的个数,用sum用来记录存在位置的总和,sum/num就是平均灰度。代码如下:
class Solution {
public int[][] imageSmoother(int[][] img) {
int m=img.length;
int n=img[0].length;
int[][] res=new int[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
int num=0;
int sum=0;
for(int x=i-1;x<=i+1;x++){
for(int y=j-1;y<=j+1;y++){
if(x>=0&&x<m&&y<n&&y>=0){
num++;
sum+=img[x][y];
}
}
}
res[i][j]=sum/num;
}
}
return res;
}
}