1

以前につなぎ合わせた 1 つの画像から、個々の画像を抽出して処理する必要があります。たとえば、以下に示すように、4 つの独立した画像をつなぎ合わせて 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には前述の例であると思います。

ここで何が欠けているのか正確にはわかりません!

この点に関するヘルプやポインタは大歓迎です。

PS:
単一の画像にステッチされた画像の数は事前にわかりません。つまり、単一の画像にはn、それぞれ異なる寸法の多数の画像が含まれている可能性があります。

4

1 に答える 1

1

スティッチされた画像は、どういうわけか完全な画像内に別々に保存されていると信じているようですか? (ほぼ確実に) そうではありません。(たとえば) 4 つの画像が 1 つの画像にステッチされて保存されると、単一の画像 (ピクセルのマトリックス) が得られ、それが N 個の画像で構成されているとは言えません。getNumImages()テキストドキュメントの「ページ」のように、内部に複数のサブイメージを許可する特別な画像フォーマットの場合のみ、色の急激な変化などを検出するための画像処理ヒューリスティックアルゴリズム。通常、それらはアニメーションのフレームです。

この例のような単純なケースでは、単純なエッジ検出器で十分です。

于 2013-03-30T13:00:04.873 に答える