var image = [
[1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1],
[1, 1, 1, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1]
];
有一个图像,其中每个像素都是白色/黑色。图像是一个简单的2D数组(0 =黑色,1 =白色)。您知道的图像在白色背景上有一个黑色矩形。你的目标是找到这个矩形并返回它的坐标。
如何遍历二维数组?
答案 0 :(得分:2)
我不确定您是否只需要知道左上角坐标,或者矩形的宽度和高度。我将在答案中加入两者。
要查找左上角,我将使用以下函数:
function findTopLeftCorner(image) {
var imageHeight = image[0].length; // Assuming all columns have the same height
// All columns should have the same height because it is an image
var imageWidth = image.length;
for (var x = 0; x < imageWidth; x++) {
for (var y = 0; y < imageHeight; y++) {
if (image[x][y] == 0) {
return {x: x, y: y};
}
}
}
}
要找到宽度和高度,我将使用以下功能:
function getWidthOfRectangle(image, topLeftCorner) {
var x = topLeftCorner.x;
while (image[x][topLeftCorner.y] == 0) {
x++;
}
//Now x is the x-coordinate of the first white (1) pixel found
//Therefore subtract 1 from it to find the last black (0) pixel found
x--;
return x - topLeftCorner.x;
}
function getHeightOfRectangle(image, topLeftCorner) {
var y = topLeftCorner.y;
while (image[topLeftCorner.x][y] == 0) {
y++;
}
//Now y is the y-coordinate of the first white (1) pixel found
//Therefore subtract 1 from it to find the last black (0) pixel found
y--;
return y - topLeftCorner.y;
}
全部放在一起:
var topLeftCorner = findTopLeftCorner(image);
var rectangle = {
x: topLeftCorner.x,
y: topLeftCorner.y,
width: getWidthOfRectangle(image, topLeftCorner),
height: getHeightOfRectangle(image, topLeftCorner)
};
希望这有帮助。这是我的第一个答案,所以如果我犯了错误,请随时在评论中告诉我。
答案 1 :(得分:1)
我提供了一个解决方案。 基本上你需要找出这个二维数组的长度。 Get size of dimensions in array
然后从第一个元素遍历它,直到找到第一个零元素,它将是矩形的左上角。
app.use(upload.single('file'))
同样从最后一个元素遍历它,找到第一个零元素,它将是矩形的右下角坐标。
https://jsfiddle.net/wdwgmczr/2/
只是通过这个小提琴。做一些更改看看输出。希望它会有所帮助。
答案 2 :(得分:-4)
var image = [
[1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1],
[1, 1, 1, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1]
];
for (var i = 0; i < image.length; i++) {
// row is a 1D array
var row = image[i];
}
第一个索引将返回第一行,依此类推。
随后,您可以像普通(1D)数组一样访问行中的每个像素。