【Python・OpenCV】基礎を解説! 画像の読み込み方法(cv2.imread)

※当サイトではアフィリエイト広告を利用しています

Python プログラミング 画像処理

【Python・OpenCV】基礎を解説! 画像の読み込み方法(cv2.imread)

2023-01-14

はじめに

※2023年1月14日に公開した記事ですが、加筆・修正して2024年1月3日に再度公開しました。

PythonでOpenCVを使った画像の読み込みについて紹介します。
OpenCVで画像を読み込むためのcv2.imread関数はさまざまな画像フォーマットを読み込むことができます。また、アルファチャンネルを含む画像の読み込みにも対応しています。

OpenCV関連書籍をAmazonで探す

画像の読み込み

画像の読み込みはcv2.imread関数を使います。

これらの画像フォーマットの読み込みに対応しています。

  • Windowsビットマップ:*.bmp, *.dib
  • JPEG:*.jpeg, *.jpg, *.jpe
  • JEPG2000:*.jp2
  • PNG:*.png
  • WebP:*.webp
  • ポータブル イメージ フォーマット:.pbm, *.pgm, *.ppm *.pxm, *.pnm
  • PFMファイル:*.pfm
  • Sun rasters:*.sr, *.ras
  • TIFFファイル:*.tiff, *.tif
  • OpenEXR イメージ ファアイル:*.exr
  • Radiance(ラディエンス) HDR:*.hdr, *.pic

cv2.imread関数は、ファイルの拡張子ではなく、読み込んだデータで画像の種類を特定しています。

読み込まれたデータの各画素はGBRの順番となっています。

cv2.imread関数

2つの引数が用意されていて、戻り値に画像データが格納されます。

cv2.imread(ファイル名[, imreadフラグ])

引数

名称説明
ファイル名(必須)読み込む画像のファイル名
imreadフラグ(オプション)ImreadModesとして定義されているフラグ

戻り値

読み込んだ画像データ(ndarray)

解説

引数のImreadModesは以下の様に定義されています。

ImreadModes

モード 説明
cv2.IMREAD_UNCHANGED

画像を色や精度などをそのままの状態で読み込みます。アルファチャネルを持つ画像も読み込むことができます。EXIFは読み込まれません。

cv2.IMREAD_GRAYSCALE グレースケールに変換して読み込みます。
cv2.IMREAD_COLOR 3チャンネルのBGRカラーイメージに変換して読み込みます。
cv2.IMREAD_ANYDEPTH 画素のビット深度が8bit/16bit/32bitのいずれかに自動判定されて読み込みます。
cv2.IMREAD_ANYCOLOR 画像の読み込みは任意のカラー フォーマットで実行されます。
cv2.IMREAD_LOAD_GDAL GDALドライバーを使用して読み込まれます。
cv2.IMREAD_REDUCED_GRAYSCALE_2 グレースケールに変換され、1/2のサイズに縮小されて読み込まれます。
cv2.IMREAD_REDUCED_COLOR_2 3チャンネルのBGRカラーイメージに変換され、、1/2のサイズに縮小されて読み込まれます。
cv2.IMREAD_REDUCED_GRAYSCALE_4 グレースケールに変換され、1/4のサイズに縮小されて読み込まれます。
cv2.IMREAD_REDUCED_COLOR_4 3チャンネルのBGRカラーイメージに変換され、、1/4のサイズに縮小されて読み込まれます。
cv2.IMREAD_REDUCED_GRAYSCALE_8 グレースケールに変換され、1/8のサイズに縮小されて読み込まれます。
cv2.IMREAD_REDUCED_COLOR_8 3チャンネルのBGRカラーイメージに変換され、、1/8のサイズに縮小されて読み込まれます。
cv2.IMREAD_IGNORE_ORIENTATION EXIF画像方向を無視し、回転せずに画像を読み込みます。

使い方

入力画像として、この画像を使用しました。

引用元
黄色と赤のプラスチック玩具

フラグなしで画像を読み込み

import cv2

# ImreadModesの指定なしで画像を読み込む
image = cv2.imread("image.jpg")

グレースケールで画像を読み込み

import cv2

# グレースケールで画像を読み込む
image = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)

画像が読み込めないとき

指定した画像ファイルのパスを間違えてしまった場合、imreadは"None"を返します。エラーは出ないので注意してください。

画像が読み込まれたか確認するコード

画像が読み込まれたかどうかは次のコードで確認できます。

import cv2

# 画像ファイルを読め込めなかった場合にはcv2.imreadは'None'を返します。
image = cv2.imread("not_exist_image.jpg")
if image is not None:
    print("画像ファイルを読み込みました。")
else:
    print("画像ファイルを読み込めませんでした。")

アルファチャンネルを含む画像の読み込み

アルファチャンネルとは画像の透過情報のチャンネルです。PNGやGIFファイルに含まれていますが、JPEGやBMPではアルファチャンネルを扱うことができません。
アルファチャンネルを含む画像を読み込むには、cv2.imread関数のImreadModesにcv2.IMREAD_UNCHANGEDを指定します。
cv2.imread関数の戻り値データのチャンネル数を確認することで、読み込んだ画像にアルファチャンネルが含まれているかどうか判断することができます。

import cv2

# cv2.IMREAD_UNCHANGEDを指定することで、アルファチャンネルを持つ画像を読み込むことができます。
image = cv2.imread("alpha_image.png", cv2.IMREAD_UNCHANGED)

# アルファチャンネルの有無を調べる
if image.shape[2] == 4:
    # アルファチャンネルがある場合
    print("この画像はアルファチャンネルを含みます。")
else:
    # アルファチャンネルがない場合
    print("この画像はアルファチャンネルが含まれていません。")

おわりに

OpenCVを使用して画像を正しく読み込む方法についての基本を解説しました。OpenCVを活用して、さまざまな画像処理を行ってみてください。

最後までご覧いただきありがとうございました。

こちらもどうぞ

■OpenCVの参考書としてどうぞ!■

参考リンク

-Python, プログラミング, 画像処理
-