-1

我有一个关于循环遍历数据表但不将数据存储在表中的问题;相反,我想将某条数据的位置存储在表中。

我现在正在使用的是一个 pgm 像素值表,它们被定义为黑色的数字 0 和白色的 255。然后我希望对这张表做的就是循环遍历它并将该像素的位置、行号和列号存储在一个数组中,但前提是该像素显示的值为 255。

我目前没有 pgm 表,所以我将提供这个作为示例。为了简单起见,您能帮我只记录显示值为 15 的像素的位置吗?非常感谢所有答案:)

P2
# feep.pgm
24 7
15
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  3  3  3  3  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0 15  0
0  3  3  3  0  0  0  7  7  7  0  0  0 11 11 11  0  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0  0  0
0  3  0  0  0  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
4

1 回答 1

1

你可以这样做:

var locs = [],
    row,
    col,
    pixelData = ...,
    nRows = ...,
    nCols = ...;
for (row = 0; row < nRows; ++row) {
    for (col = 0; col < nCols; ++col) {
        if (pixelData[row][col] == 15) {
            locs.push([row, col]);
        }
    }
}
// now the locs array has all [row,col] locations of pixels with value 15

在上面,pixelData将是一个行数组,每个行都是一个像素值数组:

var pixelData = [
    [0,  0,  0,  0,  0,  0,  0,  0,  0,  . . .],
    [0,  3,  3,  3,  3,  0,  0,  7,  7,  . . .],
    . . .
];

最后,您应该期望locs成为一个由两个元素数组组成的数组,就好像它被初始化为:

var locs = [
    [1, 19], [1,20], [1,21], [1,22], [2, 19], [2,22], ...
];
于 2013-07-15T16:34:51.817 回答