Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定以前从单个图像缝合到的图像数量时出现的问题_Java_Image_Image Processing_Jai - Fatal编程技术网

Java 确定以前从单个图像缝合到的图像数量时出现的问题

Java 确定以前从单个图像缝合到的图像数量时出现的问题,java,image,image-processing,jai,Java,Image,Image Processing,Jai,我需要从一张之前缝合在一起的图像中提取单个图像,并对其进行处理。例如,将四个独立的图像缝合以生成一个图像,如下所示: 作为图像处理新手,我做了一些研究,发现适合我的要求 这是我到目前为止写的: 图像提取和处理 ImageInputStream oldImage = ImageIO .createImageInputStream(new FileInputStream("Four_Image_Stitched.jpeg")); ImageReader image

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

作为图像处理新手,我做了一些研究,发现适合我的要求

这是我到目前为止写的:

图像提取和处理

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
        }
    }
这里的问题是
imageReader.getNumImages(true)
总是为每种格式返回
1
,而与缝合图像的数量无关;我想这应该是缝合的图像的实际数量,特别是在上述示例中的
4

我不确定我到底错过了什么

在这方面的任何帮助或建议都将不胜感激

p.S.:

缝合到单个图像中的图像数量是未知的,即单个图像可能包含
n
缝合图像的数量,每个图像具有不同的尺寸。

您似乎认为粘贴的图像以某种方式分别存储在完整图像中?事实并非如此(几乎可以肯定),一旦(比如)将四幅图像粘贴到一幅图像中并保存,您就拥有了一幅图像——像素矩阵——并且您无法判断它是由N幅图像组成的,除非您使用一些图像处理启发式算法来检测颜色的突然变化,等等。
getNumImages()
如果仅适用于某些允许多个子图像的特殊图像格式,如文本文档中的“页面”;通常它们是动画中的帧


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

您似乎认为粘贴的图像以某种方式单独存储在完整图像中?事实并非如此(几乎可以肯定),一旦(比如)将四幅图像粘贴到一幅图像中并保存,您就拥有了一幅图像——像素矩阵——并且您无法判断它是由N幅图像组成的,除非您使用一些图像处理启发式算法来检测颜色的突然变化,等等。
getNumImages()
如果仅适用于某些允许多个子图像的特殊图像格式,如文本文档中的“页面”;通常它们是动画中的帧


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

我很确定这不是
getNumImages
的目的。我相信它适用于有多个图像(如动画GIF)的格式,而不是有一个以前由零件组装而成的图像。我想你能识别这些的唯一方法就是找到具有突然颜色转换的矩形。@Javabond:对不起,我不能,我从来没有做过任何重要的图像处理。祝你好运,我相当肯定这不是
getNumImages
的目的。我相信它适用于有多个图像(如动画GIF)的格式,而不是有一个以前由零件组装而成的图像。我想你能识别这些的唯一方法就是找到具有突然颜色转换的矩形。@Javabond:对不起,我不能,我从来没有做过任何重要的图像处理。祝你好运
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;
}