我需要从之前拼接在一起的单个图像中提取单个图像并对其进行处理。 例如。缝合四个独立的图像以产生一个图像,如下所示:
对图像处理不熟悉我做了一些研究,发现Java Image IO适合我的要求。
这是我到目前为止写的:
图像提取和处理
ImageInputStream oldImage = ImageIO
.createImageInputStream(new FileInputStream("Four_Image_Stitched.jpeg"));
ImageReader imageReader = getImageReader(imageFormat);
imageReader.setInput(oldImage);
int nosOfImages = imageReader.getNumImages(true);
System.out.println("Number of Images = " + nosOfImages);
if (nosOfImages > 1) {
for (int i = 0; i < nosOfImages; i++) {
BufferedImage image = imageReader.read(i);
// do some processing
}
}
获取图片阅读器实例
private ImageReader getImageReader(String imageFormat) {
if ("PNG".equalsIgnoreCase(imageFormat)) {
return new PNGImageReader(new PNGImageReaderSpi());
}
if ("JPEG".equalsIgnoreCase(imageFormat)) {
return new JPEGImageReader(new JPEGImageReaderSpi());
}
if ("GIF".equalsIgnoreCase(imageFormat)) {
return new GIFImageReader(new GIFImageReaderSpi());
}
if ("BMP".equalsIgnoreCase(imageFormat)) {
return new BMPImageReader(new BMPImageReaderSpi());
}
return null;
}
这里的问题是imageReader.getNumImages(true)
始终为每种格式返回1
,而不管拼接图像的数量是多少;我想这应该是拼接的图像的实际数量,并且在上述示例中具体为4
。
我不确定我到底错过了什么!
对此方面的任何帮助或指示都将受到高度赞赏。
P.S:
缝合成单个图像的数量在手动之前是不可知的。单个图像可能包含n
个缝合图像,每个图像具有不同的尺寸。
答案 0 :(得分:1)
您似乎相信这些图像会以某种方式单独存储在整个图像中?这不是(几乎可以肯定)这种情况,一旦(比如说)四个图像被拼接成一个图像并保存,你就会有一个图像 - 一个像素矩阵 - 你不能说它是由N个图像组成的,除非你制作一些图像处理启发式算法,用于检测颜色的突然变化等getNumImages()
,如果仅适用于允许内部多个子图像的某些特殊图像格式,如文本文档中的“页面”;通常它们是动画中的帧。
在这样一个简单的例子中,一个简单的边缘检测器就足够了。