0

我正在使用以下方法读取 2048X2048 像素的 tiff 文件:

private static int[][] convertTo2DWithoutUsingGetRGB(BufferedImage image) {

    final short[] pixels = ((DataBufferUShort) image.getRaster().getDataBuffer()).getData();

    int[][] data = new int[2048][2048];

    int col = 0;
    int row = 0;
    int blockSize = 2048;
    for (int i=0; i<pixels.length; i++) {
        data[col][row] = pixels[i];
        row++;
        if (row == blockSize) {
            col++;
            row = 0;
        }
    }

    return data;
}   

但是,如果我将 gdal 与 python 一起使用,例如,我的数组上总是会出现负值:

import gdal # Tiff Image Read

def getArrayFromImage(fileName):
    img = gdal.Open(fileName)
    return img.ReadAsArray().astype(int)

我只得到积极的价值观。在上面的 java 方法中,是否需要对原始值进行处理才能成为 tiff 图像的有效像素?

4

1 回答 1

1

不知道为什么,但如果它是负数,则通过将 65536 添加到值来解决问题。

int j = pixels[i];
if (j < 0) {
    j += 65536;
}
data[col][row] = j;
于 2013-06-24T18:49:38.060 回答