Java 24位RGB图像到8位灰度字节数组
我正在寻找一些代码片段,用Java将24位RGB图像转换为8位灰度字节数组。我在网上探索过,但找不到任何相关资料 假设我们有一个24位RGB图像(“C:\img\face.jpg”),我们需要将其转换为8位灰度字节数组,类似于Java中的byte[]face 提前谢谢。用一种“非常”简单的方式,你可以做一些像Java 24位RGB图像到8位灰度字节数组,java,image-processing,Java,Image Processing,我正在寻找一些代码片段,用Java将24位RGB图像转换为8位灰度字节数组。我在网上探索过,但找不到任何相关资料 假设我们有一个24位RGB图像(“C:\img\face.jpg”),我们需要将其转换为8位灰度字节数组,类似于Java中的byte[]face 提前谢谢。用一种“非常”简单的方式,你可以做一些像 try { BufferedImage source = ImageIO.read(new File("C:/img/face.jpg")); Bu
try {
BufferedImage source = ImageIO.read(new File("C:/img/face.jpg"));
BufferedImage gray = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2d = gray.createGraphics();
g2d.drawImage(source, 0, 0, null);
g2d.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
ImageIO.write(gray, "png", ios);
ios.close();
byte[] array = baos.toByteArray();
} catch (IOException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
BufferedImage gray = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_ARGB);
ColorConvertOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
op.filter(source, gray);
WritableRaster raster = gray.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
byte[] rawPixels = data.getData();
字节数组将包含实际的PNG图像,而不是原始像素数据,如图所示,这很重要
你也可以使用像
try {
BufferedImage source = ImageIO.read(new File("C:/img/face.jpg"));
BufferedImage gray = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2d = gray.createGraphics();
g2d.drawImage(source, 0, 0, null);
g2d.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
ImageIO.write(gray, "png", ios);
ios.close();
byte[] array = baos.toByteArray();
} catch (IOException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
BufferedImage gray = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_ARGB);
ColorConvertOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
op.filter(source, gray);
WritableRaster raster = gray.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
byte[] rawPixels = data.getData();
如图所示,将图像转换为灰度
如果你真的想要像素数据,你可以做一些像
try {
BufferedImage source = ImageIO.read(new File("C:/img/face.jpg"));
BufferedImage gray = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2d = gray.createGraphics();
g2d.drawImage(source, 0, 0, null);
g2d.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
ImageIO.write(gray, "png", ios);
ios.close();
byte[] array = baos.toByteArray();
} catch (IOException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
BufferedImage gray = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_ARGB);
ColorConvertOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
op.filter(source, gray);
WritableRaster raster = gray.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
byte[] rawPixels = data.getData();
我假设
字节
数组应该包含像素数据……对不起,我是图像处理新手。我只想做下面的1。将jpeg图像转换为原始rgb像素数据2。将原始rgb像素数据转换为灰度像素数据3。最终输出将是灰度像素数据。我想补充一点,R、G、B通道的平均值并不是转换为灰度的最佳公式。更多信息:@Blitzkr1eg太好了,你有Java的例子吗?@MadProgrammer-它会以以下方式工作吗?1.将jpeg图像转换为原始rgb像素数据2。将原始rgb像素数据转换为灰度像素数据3。最终输出将是灰度像素数据,如果你想走这条路,它应该是这样的。加载图像并使用最后一个示例获取原始字节/像素数据…@MadProgrammer-像这样?--BuffereImage source=ImageIO.read(新文件(“C:\\img\\facefind.jpg”);BuffereImage gray=新的BuffereImage(source.getWidth()、source.getHeight()、buffereImage.TYPE_BYTE_gray);ColorConvertOp=新的ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY)),null;op.filter(源,灰色);WritableRaster raster=gray.getRaster();DataBufferByte数据=(DataBufferByte)光栅。getDataBuffer();字节[]rawPixels=data.getData();System.out.println(“字节------------”+rawPixels.length+Arrays.toString(rawPixels));