1

我正在尝试从 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();
}

有什么我做错了以将其保存为灰度吗?提前致谢

4

1 回答 1

1

您必须首先将数据(深度)分配给 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();
}
于 2018-05-17T16:50:36.037 回答