OpenCVでグレースケール画像をカラー画像(BGR)として読み出す (C++)
本記事ではC++のOpenCVを利用してグレースケール画像をカラーイメージとして読み出す方法を解説します。
環境:
OpenCV 4.6
Ubuntu 20.04
方法#
imread への引数でカラー画像として読み出すことができます。
cv::imread("target.png", cv::IMRAD_COLOR);
OpenCVではRGBではなくBGRがデフォルトであるため、読みだした画像はBGR形式であることに注意してください。
説明#
グレースケール画像であればグレーとして読みだして、そのあと自分でRGBなどに変換しなければならないと思ってしまいそうですが、読み出し時に簡単に指定ができます。
imread#
imread の引数に何が取られるかを以下に解説します。
型 | 変数名 | 説明 |
---|---|---|
const String & | fielname | 読み出す画像ファイル名 |
int | flags | フラグ |
今回重要なのは2つ目の引数である flags になります。ここに指定可能な値は ImreadModes として定義されています。
定義名 | 説明 |
---|---|
IMREAD_UNCHANGED | EXIFの回転情報などを無視して、なおかつ色変換なども行わずそのまま読み込む |
IMREAD_GRAYSCALE | グレー画像として読み出す (codec internal conversion). |
IMREAD_COLOR | BGRのカラー画像として読み出す |
IMREAD_ANYDEPTH | 読み出す画像に合わせてbit数が変動する |
IMREAD_ANYCOLOR | 読み出す画像に合わせてカラーフォーマットを変える |
IMREAD_LOAD_GDAL | 画像の読み出しにGDALドライバを利用する |
IMREAD_REDUCED_GRAYSCALE_2 | グレーで読み出し、1/2のサイズに縮小する |
IMREAD_REDUCED_COLOR_2 | BGRで読み出し、1/2のサイズに縮小する |
IMREAD_REDUCED_GRAYSCALE_4 | グレーで読み出し、1/4のサイズに縮小する |
IMREAD_REDUCED_COLOR_4 | BGRで読み出し、1/4のサイズに縮小する |
IMREAD_REDUCED_GRAYSCALE_8 | グレーで読み出し、1/8のサイズに縮小する |
IMREAD_REDUCED_COLOR_8 | BGRで読み出し、1/8のサイズに縮小する |
IMREAD_IGNORE_ORIENTATION | EXIFの回転情報を無視して読み出す |
たくさんあるように見えますが、サイズを縮小するオプションが複数あるので基本的には色とbit深度と回転情報に関するもののようです。
補足#
画像形式のデータではなく、バイナリ形式のデータから画像をグレー画像を生成する場合には別途変換作業が必要となります。