OpenCVは日本語を扱えない
OpenCVはANSI文字列以外の文字を扱えない仕様になってます。
つまり、日本語を含むファイル名・パスを扱えません...。
実行環境
Python : 3.10.1
OpenCV : 4.5.5
エラー
[ WARN:0@14.898] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp (239)
cv::findDecoder imread_('E:/my/蛻カ菴懃黄/map.png'): can't open/read file: check file path/integrity
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
対策方法
Pillowで画像ファイルを開き、OpenCV(NumPyのndarray)に変換して対策します
import numpy as np
from PIL import Image
# Pillow 画像読込
pilimg = Image.open("path")
# Pillow -> NumPy
img = np.array(pilimg)
# カラー画像の場合、RGB -> BGR変換する
if img.ndim == 3:
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
Pillowでは、カラー画像の場合RGB順にデータが格納されていくので、cvtColorでOpenCVの形式(BGR)へ変換します。
※NumPyのほうが画像読込が平均処理時間が早いですが、画像保存の際の平均処理時間はPillowが早いので、今回はPillowを使用しています。(画像読込はNumPy、保存はPillowと使い分けるのが得策かも?)