この記事では,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 library pip install opencv - python
|
# Importing the cv2 module import 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
ライブラリの他のメソッドを,自分のサンプル画像を使ってもっと試してみたくなったのではないでしょうか?