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 の引数に何が取られるかを以下に解説します。

imread の引数

変数名

説明

const String &

fielname

読み出す画像ファイル名

int

flags

フラグ

今回重要なのは2つ目の引数である flags になります。ここに指定可能な値は ImreadModes として定義されています。

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深度と回転情報に関するもののようです。

補足#

画像形式のデータではなく、バイナリ形式のデータから画像をグレー画像を生成する場合には別途変換作業が必要となります。

OpenCV
C++