我的函数是: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)?
问问题
102 次
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声明了原始图片的浅表副本,以便稍后返回原始图片的裁剪部分。
代码块的主要部分是嵌套循环:
- k在 RGB 数组上运行,这是第一个索引为 0,1,2 的数组;
- i在检查的数组行的坐标上运行(因此这是您的垂直索引);
- j在检查的数组行的列的坐标上运行(因此这是您的水平索引)。
嵌套循环内的语句将原始图片像素(位于坐标范围内)附加到返回的名为newImage的裁剪数组。
于 2021-11-29T22:40:08.557 回答