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

标签 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,这样我就根本不需要存储它们。

最佳答案

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

BufferedImage rawImage = img.getBufferedImage();

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

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

希望这能奏效

关于java - ImageJ - 在不保存文件的情况下转换图像格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43778272/

相关文章:

java - 使用 GSON 序列化 ArrayList(通用类型)

java - 改变图像不透明度

html - 用三 Angular 形创建透明的CSS边框

python-3.x - 在 python 中使用 imagej 时导入模块 jnius 出错

java - 创建简单 RMI 应用程序时出现 "ClassCastException: $Proxy0 cannot be cast"错误

java - 如何使用fitnesse测试或调用java方法?

css - 图像 "display: block"的缺点?

java - ImageJ - 为什么在更改直方图分箱时最大、最小值会发生变化?

java - Imagej 过滤器大于默认的 3x3

java - 我们怎样才能拥有一种基于 JVM 的动态类型语言?