本ブログはアフィリエイト広告を利用しています。

JavaCV(OpenCV)で画像を結合する(VConcat, HConcat)

加工画像 プログラミング

JavaCVで画像を縦、または横に結合にする方法を紹介します。
以下の関連記事です。

環境

  • Windows10 Pro
  • Spring Boot 2.5.3
  • JDK 11

pom.xml

pomでJavaCVのjarを読み込みます。

<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform -->
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv-platform</artifactId>
    <version>1.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv -->
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv</artifactId>
    <version>1.5.6</version>
</dependency>

JavaCVで画像結合

画像を結合するにはorg.bytedeco.opencv.global.opencv_core.vconcat、もしくはhconcatを使用します。
それぞれ画像を縦、横に結合することができます。
使用する際は下記ソースのようにstaticインポートするか、opencv_coreをインポートしてopencv_core.vconcat(), opencv_core.hconcat()とします。

全体ソースは以下

import static org.bytedeco.opencv.global.opencv_core.*;
import static org.bytedeco.opencv.global.opencv_imgcodecs.*;

import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.MatVector;
import org.junit.jupiter.api.Test;

class OpenCVUtilTest {

    @Test
    void testConcat() {

        try (Mat mat = imread("C:\\gomibako\\1.jpg");
                Mat concatMat = new Mat()) {
            MatVector matVector = new MatVector(mat, mat);

            // 縦結合
            vconcat(matVector, concatMat);
            imwrite("C:\\gomibako\\vconcat.jpg", concatMat);

            // 横結合
            hconcat(matVector, concatMat);
            imwrite("C:\\gomibako\\hconcat.jpg", concatMat);
        }
    }
}

VConcat, HConcatでエラーとなる場合

画像を結合する際に注意する点があります。
縦結合の場合は結合対象の画像の横幅、横結合の場合は結合対象の画像の縦の高さが一致している必要があります。
画像のリサイズが必要な場合は、 JavaCV(OpenCV)で画像のリサイズ を参照してください。
一致していない場合は以下のようなエラーが発生します。

  • VConcat(縦結合)
java.lang.RuntimeException: OpenCV(4.5.3) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.5.3\modules\core\src\matrix_operations.cpp:112: error: (-215:Assertion failed) src[i].dims <= 2 && src[i].cols == src[0].cols && src[i].type() == src[0].type() in function 'cv::vconcat'

	at org.bytedeco.opencv.global.opencv_core.vconcat(Native Method)
  • HConcat(横結合)
java.lang.RuntimeException: OpenCV(4.5.3) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.5.3\modules\core\src\matrix_operations.cpp:67: error: (-215:Assertion failed) src[i].dims <= 2 && src[i].rows == src[0].rows && src[i].type() == src[0].type() in function 'cv::hconcat'

	at org.bytedeco.opencv.global.opencv_core.hconcat(Native Method)

実行結果

画像結合に使用する画像がこちらです。

加工画像

VConcat, HConcatした画像が以下となります。

  • VConcatした画像
  • HConcatした画像

以上です。

コメント

タイトルとURLをコピーしました