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

JavaCV(OpenCV)で画像のRGBを取得する

以下の関連記事です。

環境

  • 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で画像からRGBを取得する

画像からRGBを取得するにはUByteIndexerを使用します。

全体ソースは以下

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 testGetColor() {
        // 画像読み込み
        Path img = Paths.get("C:\\gomibako\\rgb.jpg");
        Mat mat = imread(img.toFile().getAbsolutePath());

        // 画像のサイズを取得する
        UByteIndexer srcIndexer = mat.createIndexer();
        long rows = srcIndexer.sizes()[0];
        long cols = srcIndexer.sizes()[1];

        for (int x = 0; x < rows; x++) {
            int[] values = new int[3];
            for (int y = 0; y < cols; y++) {
                 // getでx, y位置の色を取得することが出来る。
                 srcIndexer.get(x, y, values);
                 // valuesにはRGBではなくBGRの順番で格納される
                 System.out.println("B = " + values[0] + ", G = " + values[1] + ", R = " + values[2]);
            }
        }
    }
}

実行結果

使用した画像は茶色一色です。RGBはそれぞれ150, 100, 1となっています。

B = 1, G = 100, R = 150

コメント

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