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");
}
}
入力画像

出力画像

サンプルコード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ライブラリを使用してカラー画像をグレースケール画像として読み込む方法
OpenCVのImgcodecsクラスが提供するimread()メソッドは、ファイル名を表す文字列を引数として受け取り、指定されたファイルの内容をMatオブジェクト(行列)として読み込み、それを返します。このメソッドを利用することで、画像ファイルの内容を簡単に読み取ることができます。 さらに、Imgcodecsクラスには、読み込みモードを指定する整数値(フラグ)を第2引数として渡せる別のバージョンも用意されています。このフラグを活用すれば、カラー画像をグレースケール画像として読み込むなど、目的に応じた柔軟な読み込みが可能です。 imread()メソッドで使用できる主なフラグ IMREAD_C
-
JavaとOpenCVライブラリを使って画像を保存(書き出し)する方法
OpenCVライブラリを利用すると、画像フィルタリング、幾何学的変換、色空間の変換、ヒストグラム処理など、さまざまな画像処理操作を行うことができます。本記事では、その中でも基本的な操作である「画像の読み込みと保存(書き出し)」の方法を解説します。画像を書き出す(保存する)方法Imgcodecsクラスのimread()メソッドを使って画像を読み込むと、その内容はMat(Matrix)オブジェクトに格納されます。読み込んだ画像をファイルとして保存するには、imwrite()メソッドを使用します。imwrite()メソッドは、以下の2つの引数を受け取ります。file:保存先のファイルパスを表す文字列