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