0

我的函数是:public static int[][][] crop(int[][][] img, int i_1, int j_1, int i_2, int j_2) 因为像素是 (i_1,j_1),(i_2,j_2) 并且该函数应该返回一个从 (i_1,j_1) 裁剪到 (i_2,j_2) 的新 3d 数组,并且新图像的大小应该是) (i_2-i_1+1)*(j_2-j_1+1)?

4

1 回答 1

1

我想这就是你要找的东西:

    public static int[][][] crop(int[][][] img, int i_1, int j_1, int i_2, int j_2) {
    int[][][] newImage = new int[3][i_2 - i_1 + 1][j_2 - j_1 + 1];

    for(int k = 0; k < 3; k++) {
        for(int i = 0; i < (i_2 - i_1 + 1); i++) {
            for(int j = 0; j < (j_2 - j_1 + 1); j++) {
                newImage[k][i][j] = img[k][i][j];
            }
        }
    }

    return newImage;
}

第一行代码采用并返回一个三维数组(可能是RGB 颜色格式的图片)作为其第一个参数。其他参数是裁剪矩阵的坐标。

在代码块中,为变量newImage声明了原始图片的浅表副本,以便稍后返回原始图片的裁剪部分。

代码块的主要部分是嵌套循环:

  1. k在 RGB 数组上运行,这是第一个索引为 0,1,2 的数组;
  2. i在检查的数组行的坐标上运行(因此这是您的垂直索引);
  3. j在检查的数组行的列的坐标上运行(因此这是您的水平索引)。

嵌套循环内的语句将原始图片像素(位于坐标范围内)附加到返回的名为newImage的裁剪数组。

于 2021-11-29T22:40:08.557 回答