Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonのOpenCVモジュールで画像を読み込む方法【cv2.imread()徹底解説】


PythonのOpenCVモジュールでは、cv2.imread()関数を使用して画像を読み込むことができます。画像パスを指定する際は、対象の画像が作業ディレクトリ内に存在するか、または画像へのフルパス(絶対パス)を指定する必要があります。

imread()の主な読み込みフラグ

cv2.imread()関数では、第2引数にフラグを指定することで、画像の読み込み方式を選択できます。主なフラグは以下の3つです。

  • cv2.IMREAD_COLOR:カラー画像として読み込みます。画像に透明度(アルファチャンネル)情報が含まれていても無視されます。このフラグがデフォルト設定です。
  • cv2.IMREAD_GRAYSCALE:グレースケール(モノクロ)モードで画像を読み込みます。
  • cv2.IMREAD_UNCHANGED:アルファチャンネルを含め、元の画像データをそのままの状態で読み込みます。

使用するサンプル画像

PythonのOpenCVモジュールで画像を読み込む方法【cv2.imread()徹底解説】

コード例1:キー操作で表示・保存を行う

import numpy as np
import cv2

my_img = cv2.imread('C:/Users/TP/Desktop/poor/poverty_india.jpg', 0)
cv2.imshow('image', my_img)

k = cv2.waitKey(0) & 0xFF

# ESCキーでウィンドウを閉じて終了
if k == 27:
   cv2.destroyAllWindows()
# sキーでグレースケール画像を保存
elif k == ord('s'):
   cv2.imwrite('C:/Users/TP/Desktop/poor/poverty_india_gray.jpg', my_img)
   cv2.destroyAllWindows()

この例では、imread()の第2引数に「0」を指定しているため、画像はグレースケールで読み込まれます。waitKey(0)はキー入力を待ち続ける命令で、ESCキー(ASCIIコード27)を押すとすべてのウィンドウが破棄されて終了し、sキーを押すとグレースケール化した画像が指定したパスにJPEG形式で保存されます。

コード例2:IMREAD_GRAYSCALEフラグを使用する

import cv2
import numpy as np
import matplotlib.pyplot as plt

my_img = cv2.imread('C:/Users/TP/Desktop/poor/poverty_india.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('image', my_img)
k = cv2.waitKey(0)
cv2.destroyAllWindows()

こちらの例では、フラグとして明示的にcv2.IMREAD_GRAYSCALEを指定しています。動作結果は「0」を指定した場合と同じです。なお、元のコードにあったcv2.destoryAllWindows()はスペルミスのためエラーになるので、正しくはcv2.destroyAllWindows()と記述する点に注意してください。

補足:matplotlibで表示する場合

上記コード例ではmatplotlibをインポートしていますが、OpenCVのimshow()だけで表示するなら不要です。matplotlibでグレースケール画像を表示したい場合は、以下のようにcmap='gray'を指定します。

plt.imshow(my_img, cmap='gray')
plt.show()

注意点:パスが間違っている場合

cv2.imread()は、指定したパスに画像が存在しない場合でもエラーを発生させず、単にNoneを返します。そのため、後続の処理でクラッシュしないよう、if my_img is None: のチェックを入れておくと安全です。

実行結果

いずれのコードを実行しても、カラー画像がグレースケール(白黒濃淡)画像に変換されてウィンドウに表示されます。

PythonのOpenCVモジュールで画像を読み込む方法【cv2.imread()徹底解説】
  1. Python・OpenCVでヒストグラム平坦化を実装する方法|cv2.equalizeHist()の使い方

    ヒストグラム平坦化(Histogram Equalization)とは ヒストグラム平坦化は、画像処理において画像のヒストグラムを利用してコントラストを調整する手法です。 この手法は、多くの画像の全体的なコントラストを向上させる効果があります。特に、画像内の有効なデータが近いコントラスト値で表現されている場合に威力を発揮します。この調整を行うことで、輝度値がヒストグラム上により均等に分布するようになり、局所的にコントラストが低い領域でも高いコントラストを得られるようになります。 OpenCVの cv2.equalizeHist() 関数 OpenCVには、この処理を実行するための関数 cv2

  2. PythonのOpenCVモジュールで画像に幾何学図形を描画する方法

    はじめに OpenCVの基本操作のひとつが「画像への描画」です。線、円、矩形(長方形)など、さまざまな幾何学形状を画像上に追加できます。 画像解析の現場では、画像の一部を強調表示したい場面がよくあります。たとえば、注目したい領域を囲む矩形を追加したり、特定の場所を指し示す矢印を描いたりするケースです。本記事では、PythonのOpenCVモジュールを使って画像に幾何学図形を描画する方法を、サンプルコードとともにわかりやすく解説します。 主な描画関数一覧 cv2.line() … 画像に直線を描画する関数 cv2.rectangle() … 画像に矩形を描画する関数 cv2.circle()