JavaのOpenCVライブラリでカラー画像をグレースケールに変換する方法
カラー画像をグレースケールに変換する基本
OpenCVのImgprocクラスが提供するcvtColor()メソッドを使うと、画像の色空間を別の色空間へ変換できます。このメソッドは以下の3つのパラメータを受け取ります。
- src – 変換元の画像を表すMatオブジェクト(ソース)
- dst – 変換結果を格納するMatオブジェクト(出力先)
- code – 変換後の色空間を指定する整数値(カラーコード)
カラー画像をグレースケールに変換する場合は、第3パラメータにImgproc.COLOR_RGB2GRAYを指定します。このコードはRGB形式の画像をグレースケール(白黒の濃淡表現)へ変換することを意味しています。
実装例
以下のコードは、画像ファイルを読み込み、グレースケールに変換してから新しいファイルとして保存する一連の流れを示したものです。
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class ColorToGrayscale {
public static void main(String args[]) throws Exception {
// OpenCVネイティブライブラリのロード
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// 画像の読み込み
Mat src = Imgcodecs.imread("spiderman.jpg");
// 出力先となる空のMatオブジェクトを作成
Mat dst = new Mat();
// グレースケールへの変換
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2GRAY);
// Imgcodecsクラスのインスタンス生成
Imgcodecs imageCodecs = new Imgcodecs();
// 変換後の画像を保存
imageCodecs.imwrite("colortogreyscale.jpg", dst);
System.out.println("Image Saved");
}
}処理の流れを解説
- ライブラリのロード:
System.loadLibrary(Core.NATIVE_LIBRARY_NAME)により、OpenCVのネイティブライブラリを読み込みます。これを忘れると実行時にエラーが発生します。 - 画像の読み込み:
Imgcodecs.imread()で対象画像ファイルを読み込み、srcというMatオブジェクトに格納します。 - 出力先の確保: 空のMatオブジェクト
dstを作成しておきます。変換結果はここに書き込まれます。 - 色変換の実行:
Imgproc.cvtColor()にソース・出力先・カラーコードを渡して変換を行います。 - 結果の保存:
imageCodecs.imwrite()で変換後の画像をファイルに出力します。
入力画像と出力結果
入力:

出力:

補足ポイント
- 読み込む画像ファイルはプロジェクトの作業ディレクトリに配置するか、絶対パスまたは相対パスで正しく指定してください。
- ファイルが見つからない場合、
imread()はnullではなく空のMatを返すため、src.empty()でチェックすると安全です。 - BGR形式で読み込んだ画像の場合は
Imgproc.COLOR_BGR2GRAYを使用するのが一般的です。OpenCVはデフォルトでBGR順を採用しているためです。
-
JavaのOpenCVライブラリでカラー画像を青・緑・赤(BGR)画像に変換する方法
OpenCVでは、Imgprocクラスが提供するcvtColor()メソッドを使うことで、画像の色空間を別の形式へ簡単に変換できます。カラー画像を青・緑・赤(BGR)のチャンネル順序に変換したい場合も、このメソッドひとつで対応可能です。cvtColor()メソッドの基本cvtColor()メソッドは、次の3つの引数を受け取ります。src − 変換元の画像を表すMatオブジェクトdst − 変換結果を格納するMatオブジェクトcode − 変換後の色空間を指定する整数値(フラグ)RGB形式の画像をBGR形式(青・緑・赤の順)に変換するには、第3引数にImgproc.COLOR_RGB2BGRを指
-
JavaとOpenCVライブラリを使って画像を保存(書き出し)する方法
OpenCVライブラリを利用すると、画像フィルタリング、幾何学的変換、色空間の変換、ヒストグラム処理など、さまざまな画像処理操作を行うことができます。本記事では、その中でも基本的な操作である「画像の読み込みと保存(書き出し)」の方法を解説します。画像を書き出す(保存する)方法Imgcodecsクラスのimread()メソッドを使って画像を読み込むと、その内容はMat(Matrix)オブジェクトに格納されます。読み込んだ画像をファイルとして保存するには、imwrite()メソッドを使用します。imwrite()メソッドは、以下の2つの引数を受け取ります。file:保存先のファイルパスを表す文字列