JavaCVで画像をグレースケールにする方法を紹介します。
以下の関連記事です。
- JavaCV(OpenCV)で特徴点マッチング
- JavaCV(OpenCV)で画像のリサイズ
- JavaCV(OpenCV)で画像のRGBを取得する
- JavaCV(OpenCV)でパノラマ合成(Stitching)
- JavaCV(OpenCV)で画像を結合する(VConcat, HConcat)
- 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で画像のグレースケール化
画像のグレースケール化には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);
}
}
}
実行結果
グレースケール化する前の画像がこちらです。
実行するとこのようになります。
以上です。
コメント