灰度图像未使用 BufferedImage.TYPE_USHORT_GRAY 保存
Grayscale image not saving using BufferedImage.TYPE_USHORT_GRAY
我正在尝试从 Kinect v2 保存深度图,它应该以灰度显示,但每次我尝试使用 BufferedImage.TYPE_USHORT_GRAY
类型将其保存为 JPG 文件时,实际上没有任何反应(屏幕上没有警告或在控制台中)。
如果我使用 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();
}
我将其保存为灰度有什么不对吗?
提前致谢
您必须先将数据(深度)分配给 BufferedImage(缓冲区深度)。
一个简单的方法是:
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();
}
我正在尝试从 Kinect v2 保存深度图,它应该以灰度显示,但每次我尝试使用 BufferedImage.TYPE_USHORT_GRAY
类型将其保存为 JPG 文件时,实际上没有任何反应(屏幕上没有警告或在控制台中)。
如果我使用 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();
}
我将其保存为灰度有什么不对吗? 提前致谢
您必须先将数据(深度)分配给 BufferedImage(缓冲区深度)。
一个简单的方法是:
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();
}