Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java OpenCVライブラリで画像の色空間を変換する方法|cvtColor()の使い方を解説

色空間とは

色空間(カラースペース)とは、画像内の色を数値的に表現するための規格のことです。OpenCVには複数の色空間が用意されており、代表的なものは以下の通りです。

  • BGR − 最も広く使われている色空間です。各ピクセルは赤・青・緑の3つの輝度値で構成されます。OpenCVのデフォルトの色空間ですが、RGBではなくBGRの順序で格納される点に注意が必要です。
  • HSV − 色相(Hue)、彩度(Saturation)、明度(Value/Brightness)の3つの要素を変更することでさまざまな色を表現します。色の直感的な操作に適しています。
  • CMY − 減法混色の色空間です。白を起点として、シアン・マゼンタ・イエローの値を差し引くことで色を作り出します。印刷分野でよく使われます。
  • Y'UV − 輝度成分(Y')と2つの色差成分(UV)で色を定義する色空間です。アナログのコンポジット映像規格などで採用されています。

cvtColor()メソッドによる色空間の変換

画像の表現形式をある色空間から別の色空間へ変換するには、org.opencv.imgproc.ImgprocクラスのcvtColor()メソッドを使用します。このメソッドは以下の3つの引数を受け取ります。

  • 元画像(ソースMatオブジェクト)
  • 変換結果を格納する空のMatオブジェクト(デスティネーション)
  • 変換先の色空間を示すカラーコード

例えば、BGRからHSVへ変換する場合はCOLOR_BGR2HSVを、BGRからYUVへ変換する場合はCOLOR_BGR2YUVをカラーコードとして指定します。

サンプルコード

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class ChangingColorSpaces {
   public static void main(String args[]) throws Exception {
      // OpenCVのコアライブラリを読み込む
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      // 画像を読み込む
      Mat src = Imgcodecs.imread("D:\\images\\elephant.jpg");
      // 空の出力用マトリックスを作成
      Mat dst = new Mat();
      // BGRからグレースケールへ変換
      Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2GRAY);
      HighGui.imshow("BGR to Gray", dst);
      dst = new Mat();
      // BGRからHSVへ変換
      Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2HSV);
      HighGui.imshow("BGR to HSV", dst);
      dst = new Mat();
      // BGRからYUVへ変換
      Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2YUV);
      HighGui.imshow("BGR to YUV", dst);
      HighGui.waitKey();
   }
}

入力画像

Java OpenCVライブラリで画像の色空間を変換する方法|cvtColor()の使い方を解説

実行結果

上記のプログラムを実行すると、次のようなウィンドウが表示されます。

BGR to Gray(グレースケール変換)

Java OpenCVライブラリで画像の色空間を変換する方法|cvtColor()の使い方を解説

BGR to HSV(HSV変換)

Java OpenCVライブラリで画像の色空間を変換する方法|cvtColor()の使い方を解説

BGR to YUV(YUV変換)

Java OpenCVライブラリで画像の色空間を変換する方法|cvtColor()の使い方を解説

まとめ

OpenCVのcvtColor()メソッドを使えば、わずか1行のコードで画像の色空間を自由に変換できます。用途に応じて適切なカラーコードを選択することで、画像処理やコンピュータビジョンの前処理を効率的に行えます。

  1. Javaで画像のピクセル(RGB値)を設定・変更する方法

    ピクセルとはデジタル画像を構成する最小単位の要素であり、各ピクセルにはアルファ(透明度)、赤、緑、青の4つの値が含まれています。ピクセル値は32ビットのメモリ領域に、ARGBの順序で各8ビットずつ格納されています。そのため、画像の色を変更するには、以下の手順を実行する必要があります。画像内のすべてのピクセルを順番にループ処理する。getRGB()メソッドを使用してピクセル値を取得する。ピクセル値からARGB値を取り出す。RGB値に対して必要な変更を加える。変更後のRGB値で新しいピクセル値を作成する。setRGB()メソッドを使用して新しいピクセル値を設定する。ARGB値を設定する方法まず、ピ

  2. JavaとOpenCVライブラリを使って画像を保存(書き出し)する方法

    OpenCVライブラリを利用すると、画像フィルタリング、幾何学的変換、色空間の変換、ヒストグラム処理など、さまざまな画像処理操作を行うことができます。本記事では、その中でも基本的な操作である「画像の読み込みと保存(書き出し)」の方法を解説します。画像を書き出す(保存する)方法Imgcodecsクラスのimread()メソッドを使って画像を読み込むと、その内容はMat(Matrix)オブジェクトに格納されます。読み込んだ画像をファイルとして保存するには、imwrite()メソッドを使用します。imwrite()メソッドは、以下の2つの引数を受け取ります。file:保存先のファイルパスを表す文字列