この記事では,OpenCV-Python の imread() メソッドの詳細な使い方と, imread() メソッドを用いて画像を読み込むさまざまな方法について学びます.
Pythonのimread()とは?
imread()は,OpenCV-Python ライブラリで最も便利でよく利用されるメソッドの1つです.これは,指定されたファイルからPythonプログラム内に画像を読み込むために利用されます.画像の読み込みに成功すると,numpy.ndarray(NumPy N次元配列) が返されます.このnumpy.ndarray` は、読み込んだ画像がカラフルな画像であれば3次元配列、グレースケール画像であれば2次元配列になる。
Python の imread() を利用するために OpenCV をインポートする
Python の imread() メソッドを利用するためには,opencv-python ライブラリの cv2 モジュールが必要です.そのためには、まず仮想環境内またはローカルシステム上に opencv-python ライブラリをインストールし、次にPythonプログラム内で cv2 モジュールをインポートする必要があります。
以下は、インストールとインポートのためのコマンドです。
# Installing the opencv-python librarypip install opencv-python
|
# Importing the cv2 moduleimport cv2
|
Python imread() メソッドの構文
以下は、Pythonのimread()`メソッドの正しい構文です。
cv2.imread(filename, flag) |
パラメータ.cv2.imread()` メソッドは,2つのパラメータを持ちます.2つのパラメータは以下の通りです。
-
-
filenameは,最初に渡す必須のパラメータで,イメージファイル(または拡張子付きのイメージ名)のパスを表す文字列を指定します.注意: イメージファイルが作業ディレクトリにない場合は、フルパスで渡さなければなりません。
-
-
-
flagは2番目のオプションのパラメータで,通常3つのタイプの値をとります.cv2.IMREAD_COLOR,cv2.IMREAD_GRAYSCALE, そしてcv2.IMREAD_UNCHANGEDの3つの値をとります.実際には,このflagは,画像を読み込む際のモードを定義します.注意: デフォルトでは、このflagパラメータの値はcv2.IMREAD_COLORまたは1` です。
-
戻り値: cv2.imread() メソッドは,画像の読み込みに成功すると numpy.ndarray (NumPy の N 次元配列)を返します.注意:何らかの理由(ファイルが存在しない,不適切なパーミッション,未サポートまたは無効なフォーマットなど)で画像を読み込むことができない場合,空の行列( Mat::data==NULL )を返します.
Python の imread() メソッドでサポートされる画像フォーマット
以下は,cv2.imread() メソッドがサポートする画像フォーマットです.
- ポータブルネットワークグラフィックス –
*.png. - ポータブルイメージフォーマット –
*.pbm,*.pgm,*.ppm*.pxm,*.pnm. - Windows のビットマップ –
*.bmp. - JPEG ファイル –
*.jpeg,*.jpg,*.jpe. - JPEG 2000 ファイル –
*.jp2. - WebP –
*.webp. - PFM ファイル –
*.pfm. - Sun ラスター –
*.sr,*.ras - OpenEXR 画像ファイル –
*.exr. - ラディアンス HDR –
*.hdr,*.pic - TIFF ファイル –
*.tiff,*.tif.
注意: .JPEG 形式の画像の読み込みは,システムにインストールされている OpenCV ライブラリのバージョン,プラットフォーム,環境(x86/ARM など)などに依存します.また,最も重要なことは,画像の種類は画像ファイルの拡張子ではなく, cv2.imread() メソッドが返す numpy.ndarray の内容によって決定されるということです.
それでは、Pythonのコードですべてを実装してみましょう…
img = cv2.imread('sample_image.png', cv2.IMREAD_COLOR)
print("Shape of the loaded image is", img.shape)
|
この記事もチェック:PythonとOpenCVで画像の特徴量抽出・照合を実装する方法
“flag = cv2.IMREAD_COLOR” を利用した画像の読み込み
flagにcv2.IMREAD_COLOR` という値を渡すと,まず画像が透明度のない3チャンネルのBGRカラー画像に変換されてから,プログラムにロードされます.
これは flag パラメータのデフォルト値です.cv2.IMREAD_COLORに対応する整数値としては1があります.また,cv2.IMREAD_COLORの代わりに1を使用することもできます.注意:ここでは,画像の形状にアクセスするために.shape` メソッドを利用しています.このメソッドは,行数,列数,チャンネル数を表すタプルを返します.
Shape of the loaded image is (512, 512, 3) |
結果は以下の通りです。
img = cv2.imread('sample_image.png', cv2.IMREAD_GRAYSCALE)
print("Shape of the loaded image is", img.shape)
|
出力されるタプルは、サンプル画像の行数(画像の高さ)である 512、列数(画像の幅)である 512、そしてチャンネル数である 3 の3つの値を持っています。
ここでは,フラグの値が cv2.IMREAD_COLOR であるため,読み込まれた画像には3つのチャンネル(青,緑,ランプ,赤)のみが存在します.
4番目のチャンネルである透明度やアルファチャンネルは,たとえサンプル画像にあったとしても無視されます.
Loading image using “flag = cv2.IMREAD_GRAYSCALE”.
flagにcv2.IMREAD_GRAYSCALEという値を渡すと,まず画像がシングルチャンネルのグレースケールイメージに変換され,その後,プログラムにロードされます.cv2.IMREAD_GRAYSCALE に対応する整数値は 0 であり, cv2.IMREAD_GRAYSCALE の代わりに 0 を用いることもできます.
Shape of the loaded image is (512, 512) |
出力されます.
img = cv2.imread('sample_image.png', cv2.IMREAD_UNCHANGED)
print("Shape of the loaded image is",img.shape)
|
出力タプルは,2つの値のみを持ちます. 512 がサンプル画像の行数, 512 が列数です.また, cv2.imread() メソッドに渡された入力サンプル画像に関係なく, flag の値が 0 または cv2.IMREAD_GRAYSCALE である場合は,グレースケール画像として読み込まれます.
この記事もチェック:PythonとOpenCVを使って画像分割|二値化やグレースケールの変換等を解説
Loading image using “flag = cv2.IMREAD_UNCHANGED”
flagにcv2.IMREAD_UNCHANGEDという値を渡すと,画像がアルファチャンネルや透明度チャンネルと共にそのままプログラムにロードされます.cv2.IMREAD_UNCHANGED に対応する整数値は -1 で, cv2.IMREAD_UNCHANGED の代わりに -1 を利用することもできます.
Shape of the loaded image is (512, 512, 4) |
出力されます.
出力:

出力されるタプルは,3つの値 512 がサンプル画像の行数(画像の高さ), 512 が列数(画像の幅),そして 4 がチャンネル数です.
ここでは,ロードされた画像は,4つのチャンネル Blue, Green, Red & フラグの値が cv2.IMREAD_UNCHANGED であるため,透明度が設定されています.4番目のチャンネルである透明度,あるいはアルファチャンネルは,サンプル画像に存在すればそれに含まれます.
まとめ
この記事では、flag パラメータの値を変えるだけで、画像をロードするさまざまな方法を学びました。
Python の imread() メソッドや opencv-python ライブラリの他のメソッドを,自分のサンプル画像を使ってもっと試してみたくなったのではないでしょうか?