JavaCVで画像の任意の範囲を矩形に切り出す方法を紹介します。
以下の関連記事です。
- JavaCV(OpenCV)で特徴点マッチング
- JavaCV(OpenCV)で画像のリサイズ
- JavaCV(OpenCV)で画像のRGBを取得する
- JavaCV(OpenCV)でパノラマ合成(Stitching)
- JavaCV(OpenCV)で画像をグレースケール化
- JavaCV(OpenCV)で画像を結合する(VConcat, HConcat)
- JavaCV(OpenCV)で画像を2値化(白黒化)する
環境
- 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.opencv_core.Rect.Rectを使用します。
Rectの第1引数から第4引数までにそれぞれ、x, y, width, height を指定してインスタンスを生成します。
次にMatの第1引数に画像情報が格納されているMat、第2引数に生成したRectを指定して切り出した画像情報のMatを新たに生成します。
範囲外を指定した場合はエラーとなるので注意が必要です。
全体ソースは以下
import static org.bytedeco.opencv.global.opencv_imgcodecs.*;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Rect;
import org.junit.jupiter.api.Test;
class OpenCVUtilTest {
@Test
void testRect() {
int x = 100;
int y = 200;
int width = 400;
int height = 200;
try (Mat mat = imread("C:\\gomibako\\stitching_org.jpg");
Mat rectMat = new Mat(mat, new Rect(x, y, width, height));) {
imwrite("C:\\gomibako\\stitching_rect.jpg", rectMat);
}
}
}
実行結果
切り出しに使用する画像がこちらです。

切り出した画像が以下です。

以上です。
コメント