1

我需要从之前拼接在一起的一张图像中提取单个图像并对其进行处理。例如,将四个独立的图像拼接成一个图像,如下所示:

先前拼接的图像

作为图像处理的新手,我做了一些研究,发现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是在提到的例子中。

I am not sure what exactly I am missing here!

Any help or pointers in this regard would be highly appreciated.

P.S.:
Number of images stitched into single are not know before hand i.e. a single image might contain n number of stitched images, each with different dimensions.

4

1 回答 1

1

您似乎相信拼接图像以某种方式单独存储在完整图像中?情况并非如此(几乎可以肯定),一旦将(比如说)四个图像拼接成一个图像并保存,你就有一个图像 - 一个像素矩阵 - 你不能说它是由 N 个图像组成的,除非你一些图像处理启发式算法来检测颜色的突然变化等,getNumImages()如果仅适用于允许内部多个子图像的一些特殊图像格式,例如文本文档中的“页面”;通常它们是动画中的帧。

在像这个例子这样简单的情况下,一个简单的边缘检测器就足够了。

于 2013-03-30T13:00:04.873 回答