ImageJ - 在不保存文件的情况下转换图像格式

ImageJ - Convert image format without saving file

我正在使用 ImageJ API 将一些 24 位 TIFF 图像转换为 8 位 JPG。 转换后我需要对这些图像进行其他处理。 我做了这个:

ImagePlus img = IJ.openImage(f.getAbsolutePath()); // Open image
new ImageConverter(img).convertToGray8(); // Convert image to 8-bit grayscale
IJ.saveAs(img, "jpg", newPath); // Export image to jpg
// Read the same image again
// Process it

我的问题是转换必须将图像保存到磁盘,我必须立即再次读取它,而且我正在处理大量图像。 有没有办法创建 jpg 图像并放入对象而不将其存储在磁盘上?

具体来说,我的目标是创建一个包含图像字节内容的 Hadoop SequenceFile,因此我根本不需要存储它们。

您可以从 ImagePlus class 中获取原始缓冲图像,如下所示:

BufferedImage rawImage = img.getBufferedImage();

所以理论上你可以从那里使用 API 来获取字节而不是写入磁盘

ByteArrayOutputStream baos=new ByteArrayOutputStream();
ImageIO.write(rawImage, "jpg", baos);
byte[] imageInByte=baos.toByteArray();

希望这能奏效

我认为最好的方法是只抓取缓冲图像而不是保存它:

使用ImagePlus myImage = IJ.getImage();到return一个ImagePlus对象,然后你可以使用myImage.getBufferedImage()到return一个标准的java.awt.image.BufferedImage,现在你无需 ImagePlus 库即可继续使用缓冲图像。

ImagePlus img = IJ.openImage(f.getAbsolutePath()); // Open image
new ImageConverter(img).convertToGray8(); // Convert image to 8-bit grayscale
ImagePlus myImage = IJ.getImage();
BufferedImage bufferedImage = myImage.getBufferedImage();
// Process bufferedImage

来自 ImagePlus 方法:https://imagej.nih.gov/ij/developer/api/ij/ImagePlus.html

public java.awt.image.BufferedImage getBufferedImage()

Returns a copy of this image as an 8-bit or RGB BufferedImage.