JavaCVで画像を縦、または横に結合にする方法を紹介します。
以下の関連記事です。
- JavaCV(OpenCV)で特徴点マッチング
- JavaCV(OpenCV)で画像のリサイズ
- JavaCV(OpenCV)で画像のRGBを取得する
- JavaCV(OpenCV)でパノラマ合成(Stitching)
- JavaCV(OpenCV)で画像をグレースケール化
- JavaCV(OpenCV)で画像を2値化(白黒化)する
- JavaCV(OpenCV)で画像の切り出し
環境
- 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した画像
以上です。
コメント