java - 灰度图像未使用 BufferedImage.TYPE_USHORT_GRAY 保存

标签 java bufferedimage kinect-v2

我正在尝试从 Kinect v2 保存深度图,它应该以灰度形式显示,但每次我尝试使用 BufferedImage.TYPE_USHORT_GRAY 类型将其保存为 JPG 文件时,实际上什么也没有发生(否屏幕或控制台中出现警告)。

如果我使用 BufferedImage.TYPE_USHORT_555_RGBBufferedImage.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();
}

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

最佳答案

您必须首先将数据(深度)分配给 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();
}

关于java - 灰度图像未使用 BufferedImage.TYPE_USHORT_GRAY 保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50395608/

相关文章:

java - 灰度 BufferedImage 的图形/文件输出

java - 我应该为我的 2D 滚动 map 使用什么缓冲策略?

java - 如何在Android中仅以纵向模式在10英寸平板电脑中进行设计?

java - JBoss + Hibernate + Faces教程

java - getResourceAsStream 在 Eclipse IDE 中有效,但在 JAR 格式中无效

c++ - Kinect 2 - AcquireLatestFrame() 大部分时间都失败

javascript - 如何使用 Node.js 获取 Windows 版本?

java - 在 Tomcat/Spring 中映射静态和动态文件?

java - 无法从 Jenkins 将 Artifact 部署到 Nexus 存储库