Изображение в градациях серого не сохраняется с помощью BufferedImage.TYPE_USHORT_GRAY - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь сохранить карту глубины из Kinect v2, которая должна отображаться в оттенках серого, но каждый раз, когда я пытаюсь сохранить ее в виде файла JPG, используя тип BufferedImage.TYPE_USHORT_GRAY, буквально ничего не происходит (Нет предупреждений на экране или в консоли ).

Мне удается сохранить его, если я использую типы BufferedImage.TYPE_USHORT_555_RGB или BufferedImage.TYPE_USHORT_565_RGB, но вместо того, чтобы быть в оттенках серого, он получается в виде голубоватой или зеленоватой карты глубины.

Найдите ниже пример кода:

short[] depth = myKinect.getDepthFrame();
int DHeight=424;
int DWidth = 512;
int dx=0;
int dy = 21;

BufferedImage bufferDepth = new BufferedImage(DWidth,  DHeight, BufferedImage.TYPE_USHORT_GRAY);

try {
    ImageIO.write(bufferDepth, "jpg", outputFileD);
} catch (IOException e) {
    e.printStackTrace();
}

Что-то я делаю не так, чтобы сохранить его в оттенках серого? Заранее спасибо

1 Ответ

0 голосов
/ 17 мая 2018

Сначала вы должны назначить свои данные (глубину) для BufferedImage (bufferDepth).

Простой способ сделать это:

short[] depth = myKinect.getDepthFrame();
int DHeight = 424;
int DWidth = 512;
int dx = 0;
int dy = 21;

BufferedImage bufferDepth = new BufferedImage(DWidth, DHeight, BufferedImage.TYPE_USHORT_GRAY);

for (int j = 0; j < DHeight; j++) {
    for (int i = 0; i < DWidth; i++) {
        int index = i + j * DWidth;
        short value = depth[index];
        Color color = new Color(value, value, value);
        bufferDepth.setRGB(i, j, color.getRGB());
    }
}

try {
    ImageIO.write(bufferDepth, "jpg", outputFileD);
} catch (IOException e) {
    e.printStackTrace();
}
...