PythonとOpenCV.imreadメソッドを使って色々な方法で画像を読み込む方法

スポンサーリンク

この記事では,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つのパラメータは以下の通りです。

    1. filename は,最初に渡す必須のパラメータで,イメージファイル(または拡張子付きのイメージ名)のパスを表す文字列を指定します.注意: イメージファイルが作業ディレクトリにない場合は、フルパスで渡さなければなりません。
    1. 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)

“flag = cv2.IMREAD_COLOR” を利用した画像の読み込み

flagcv2.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”.

flagcv2.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 である場合は,グレースケール画像として読み込まれます.

Loading image using “flag = cv2.IMREAD_UNCHANGED”

flagcv2.IMREAD_UNCHANGEDという値を渡すと,画像がアルファチャンネルや透明度チャンネルと共にそのままプログラムにロードされます.cv2.IMREAD_UNCHANGED に対応する整数値は -1 で, cv2.IMREAD_UNCHANGED の代わりに -1 を利用することもできます.

Shape of the loaded image is (512, 512, 4)

出力されます.

出力:

Sample Image
Sample Image

出力されるタプルは,3つの値 512 がサンプル画像の行数(画像の高さ), 512 が列数(画像の幅),そして 4 がチャンネル数です.

ここでは,ロードされた画像は,4つのチャンネル Blue, Green, Red & フラグの値が cv2.IMREAD_UNCHANGED であるため,透明度が設定されています.4番目のチャンネルである透明度,あるいはアルファチャンネルは,サンプル画像に存在すればそれに含まれます.

まとめ

この記事では、flag パラメータの値を変えるだけで、画像をロードするさまざまな方法を学びました。

Python の imread() メソッドや opencv-python ライブラリの他のメソッドを,自分のサンプル画像を使ってもっと試してみたくなったのではないでしょうか?

タイトルとURLをコピーしました