JavaCVで画像のリサイズを行う方法です。
以下の関連記事です。
- JavaCV(OpenCV)で特徴点マッチング
- JavaCV(OpenCV)で画像のRGBを取得する
- JavaCV(OpenCV)でパノラマ合成(Stitching)
- JavaCV(OpenCV)で画像をグレースケール化
- JavaCV(OpenCV)で画像を結合する(VConcat, HConcat)
- JavaCV(OpenCV)で画像を2値化(白黒化)する
- JavaCV(OpenCV)で画像の切り出し
環境
- Windows10 Pro
- Spring Boot 2.5.3
- JDK 11
Spring Bootなのは特に意味はないです。
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によるリサイズ
画像の特徴点マッチングを行う際、画像が小さすぎると特徴点が取れなかったりするので私は主にそういう場合に使用しています。
リサイズにはそのまんま resize() というメソッドです。
org.bytedeco.opencv.global.opencv_imgproc.resize(@ByVal Mat src, @ByVal Mat dst, @ByVal Size dsize)
変更したいサイズは以下で横と縦のサイズを指定します。
ここでは元サイズの2倍にしています。
Size size = new Size((int)(cols * 2), (int)(rows * 2));
全体ソースは以下
import static org.bytedeco.opencv.global.opencv_imgcodecs.*; import static org.bytedeco.opencv.global.opencv_imgproc.*; import java.nio.file.Path; import java.nio.file.Paths; import org.bytedeco.javacpp.indexer.UByteIndexer; import org.bytedeco.opencv.opencv_core.Mat; import org.bytedeco.opencv.opencv_core.Size; import org.junit.jupiter.api.Test; class OpenCVUtilTest { @Test void testResize() { // 画像読み込み Path img = Paths.get("C:\\gomibako\\2.jpg"); Mat mat = imread(img.toFile().getAbsolutePath()); // 画像のサイズを取得する UByteIndexer srcIndexer = mat.createIndexer(); long rows = srcIndexer.sizes()[0]; long cols = srcIndexer.sizes()[1]; Size size = new Size((int)(cols * 2), (int)(rows * 2)); // リサイズ後の画像格納用 Mat resizeMat = new Mat(); // リサイズ resize(mat, resizeMat, size); // 画像出力 imwrite("C:\\gomibako\\2x.jpg", resizeMat); } }
実行結果
使用画像はこちらです。
実行後との比較画像です。ちょうど2倍の大きさで作成されています。
以上です。
コメント