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

JavaCV(OpenCV)で画像をグレースケール化

org プログラミング

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で画像のグレースケール化

画像のグレースケール化にはcvtColor()を使用します。
Pythonならimread()で画像を読み込みと同時にグレースケール化できましたがJavaCVだと何故かできませんでした。

cv2.imread('XXXX.jpg', cv2.IMREAD_GRAYSCALE)

その為、上で書いたようにcvtColor()でグレースケール化を行います。
cvtColorの第1引数にグレースケール化したい画像のMat、第2引数にグレースケール化した画像を格納するMat、グレースケール化するためのint値(org.bytedeco.opencv.global.opencv_imgproc)を指定します。

全体ソースは以下

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

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

class OpenCVUtilTest {
    @Test
    void testGray() {
        // NG
        try (Mat grayMat = imread("C:\\gomibako\\org.jpg", COLOR_BGR2GRAY)) {
            imwrite("C:\\gomibako\\NG-COLOR_BGR2GRAY.jpg", grayMat);
        }

        // OK
        try (Mat mat = imread("C:\\gomibako\\org.jpg");
                Mat grayMat = new Mat()) {
            // org.bytedeco.opencv.global.opencv_imgprocはstaticインポートしてる
            cvtColor(mat, grayMat, CV_BGR2GRAY);
            imwrite("C:\\gomibako\\OK-COLOR_BGR2GRAY.jpg", grayMat);
        }
    }
}

実行結果

グレースケール化する前の画像がこちらです。

org

実行するとこのようになります。

以上です。

コメント

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