【OpenCV/Python】imreadで画像ファイルが読み込めないときの対応

opencv-pythonのimreadで画像を開き、以下のようなフィルタ処理を行うプログラムを実行すると、エラーが表示される場合があります。

import cv2

# OpenCVで画像ファイルを開く
img = cv2.imread("Mandrill.bmp", cv2.IMREAD_UNCHANGED)

# ガウシアンフィルタ
dst = cv2.GaussianBlur(img, (3, 3), 0)

cv2.imshow("Image", dst)
cv2.waitKey(0)

エラー内容

OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\smooth.dispatch.cpp:617: error: (-215:Assertion failed) !_src.empty() in function ‘cv::GaussianBlur’

 

OpenCVの場合、エラー内容の最後の方を見ると、だいたいエラーの原因がわかる場合が多いのですが、今回のエラーの内容の場合

  !_src.empty() in function ‘cv::GaussianBlur’

の部分が大事です。

直訳的に言うと、

  ’cv::GaussianBlur’関数の入力画像(src)は空(empty)ではいけません。

と言われています。

入力画像が空になる原因は imread()関数で画像ファイルが読み込めない場合がほとんどなのですが、読み込めない原因は、主に以下の2つです。

 

●画像ファイルがみつからない。(カレントディレクトリに画像ファイルが無い)

●ファイル名、ディレクトリ名に日本語が含まれている

 

画像ファイルがみつからない場合

imread()関数で、ファイル名の部分に相対パスでファイル名を指定すると、カレントディレクトリにあるファイルを探しに行くため、画像ファイルがカレントディレクトリに無いと、画像ファイルを開く事ができません。

【対策】

①ファイル名を相対パスではなく、絶対パス(フルパス)で指定する。

(例)

img = cv2.imread(r"C:\temp\Mandrill.bmp", cv2.IMREAD_UNCHANGED)

 

②カレントディレクトリを確認し、カレントディレクトリにファイルを置く。

カレントディレクトリは以下のようにすると、確認ができます。

import os

# カレントディレクトリの表示
print(os.getcwd())

ファイル名、ディレクトリ名に日本語が含まれている場合

OpenCVでは日本語を扱う事ができません。

そのため、画像ファイル名においても日本語が含まれるとimread関数で画像ファイルの読み込みに失敗します。

日本語ファイル名の画像を開くには、OpenCVではなく、PillowやNumPyを使って画像ファイルを開き、OpenCVの画像形式である ndarray へ変換する事ができます。

Pillowで画像ファイルを開いた方が、さまざまな画像ファイルフォーマットに対応しているので、汎用性が高いと思います。

(参考)

【OpenCV/Python】日本語の画像ファイル読込・保存

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください