ImageJ - 转换图像格式而不保存文件

时间:2017-05-04 08:58:43

标签: java image imagej

我正在使用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,其中包含图像的字节内容,因此我根本不需要存储它们。

2 个答案:

答案 0 :(得分:1)

您可以从ImagePlus类中获取原始缓冲图像:

BufferedImage rawImage = img.getBufferedImage();

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

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

希望这会起作用

答案 1 :(得分:0)

我认为你最好的方法就是抓住bufferedimage而不是保存它:

使用ImagePlus myImage = IJ.getImage();返回ImagePlus个对象,然后您可以使用myImage.getBufferedImage()返回标准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()

     

以8位或RGB BufferedImage形式返回此图像的副本。