以下の関連記事です。
- JavaのOpenCVで特徴点マッチング
- JavaCV(OpenCV)で画像のリサイズ
- JavaCV(OpenCV)でパノラマ合成(Stitching)
- JavaCV(OpenCV)で画像をグレースケール化
- 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で画像から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
コメント