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

JavaでOpenCVライブラリを使用してカラー画像をグレースケール画像として読み込む方法

OpenCVのImgcodecsクラスが提供するimread()メソッドは、ファイル名を表す文字列を引数として受け取り、指定されたファイルの内容をMatオブジェクト(行列)として読み込み、それを返します。このメソッドを利用することで、画像ファイルの内容を簡単に読み取ることができます。

さらに、Imgcodecsクラスには、読み込みモードを指定する整数値(フラグ)を第2引数として渡せる別のバージョンも用意されています。このフラグを活用すれば、カラー画像をグレースケール画像として読み込むなど、目的に応じた柔軟な読み込みが可能です。

imread()メソッドで使用できる主なフラグ

  • IMREAD_COLOR ― 読み込んだ画像を3チャンネルのBGR(青・緑・赤)カラー画像に変換します。

  • IMREAD_GRAYSCALE ― 読み込んだ画像を1チャンネルのグレースケール画像に変換します。

  • IMREAD_LOAD_GDAL ― GDALドライバーを使用して画像を読み込みます。

  • IMREAD_ANYCOLOR ― 可能な限り元のカラーフォーマットのまま画像を読み込みます。

  • IMREAD_REDUCED_COLOR_2 / IMREAD_REDUCED_COLOR_4 / IMREAD_REDUCED_COLOR_8 ― 3チャンネルBGRとして画像を読み込み、それぞれ元のサイズの1/2、1/4、1/8に縮小します。

  • IMREAD_REDUCED_GRAYSCALE_2 / IMREAD_REDUCED_GRAYSCALE_4 / IMREAD_REDUCED_GRAYSCALE_8 ― 1チャンネルのグレースケール画像として読み込み、それぞれ元のサイズの1/2、1/4、1/8に縮小します。

  • IMREAD_UNCHANGED ― 読み込んだ画像を元の状態のまま返します。

したがって、カラー画像をグレースケール画像として読み込みたい場合は、IMREAD_GRAYSCALE、または縮小も行いたい場合はIMREAD_REDUCED_GRAYSCALE_Xをフラグとして指定します。

サンプルコード1:IMREAD_GRAYSCALEを使用する場合

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;

public class ReadAsGreyScale {
    public static void main(String args[]) {
        // OpenCVコアライブラリのロード
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        // ファイルから画像をグレースケールモードで読み込む
        Mat matrix = Imgcodecs.imread("D://images//sunset.jpg", Imgcodecs.IMREAD_GRAYSCALE);
        // 変換した画像を保存する
        Imgcodecs.imwrite("D://images//sunset_greyscale.jpg", matrix);
        System.out.println("Image re-Saved");
    }
}

入力画像

JavaでOpenCVライブラリを使用してカラー画像をグレースケール画像として読み込む方法

出力画像

JavaでOpenCVライブラリを使用してカラー画像をグレースケール画像として読み込む方法

サンプルコード2:IMREAD_REDUCED_GRAYSCALE_4を使用する場合

次の例では、IMREAD_REDUCED_GRAYSCALE_4を指定することで、画像をグレースケールに変換しながら、同時に元のサイズの1/4に縮小して読み込んでいます。

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;

public class ReadingAsGrey2 {
    public static void main(String args[]) {
        // OpenCVコアライブラリのロード
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        String input = "D://images//sunset.jpg";
        // ファイルから画像をグレースケール+1/4サイズで読み込む
        Mat matrix = Imgcodecs.imread(input, Imgcodecs.IMREAD_REDUCED_GRAYSCALE_4);
        // 変換した画像を保存する
        Imgcodecs.imwrite("D://images//sunset_grey_8.jpg", matrix);
        System.out.println("Image re-Saved");
    }
}

出力画像

JavaでOpenCVライブラリを使用してカラー画像をグレースケール画像として読み込む方法

  1. JavaでOpenCVライブラリを使用してカラー画像をグレースケール画像として読み込む方法

    OpenCVのImgcodecsクラスが提供するimread()メソッドは、ファイル名を表す文字列を引数として受け取り、指定されたファイルの内容をMatオブジェクト(行列)として読み込み、それを返します。このメソッドを利用することで、画像ファイルの内容を簡単に読み取ることができます。 さらに、Imgcodecsクラスには、読み込みモードを指定する整数値(フラグ)を第2引数として渡せる別のバージョンも用意されています。このフラグを活用すれば、カラー画像をグレースケール画像として読み込むなど、目的に応じた柔軟な読み込みが可能です。 imread()メソッドで使用できる主なフラグ IMREAD_C

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

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