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.
我正在使用 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.