PythonとOpenCVを使用して画像処理を行う際、日本語を含むファイルパスを扱うことが問題となることがあります。具体的には、cv2.imread
で日本語を含むファイルパスの画像を読み込もうとすると失敗し、cv2.imwrite
を実行した際にファイルパスに含まれる日本語が化けるという問題があります。
これを解決するための一つの方法は、cv2.imread
とcv2.imwrite
を別の関数に置き換えることです。以下にそのコードを示します。
import numpy as np
import cv2
import os
def imread(filename, flags=cv2.IMREAD_COLOR, dtype=np.uint8):
try:
n = np.fromfile(filename, dtype)
img = cv2.imdecode(n, flags)
return img
except Exception as e:
print(e)
return None
def imwrite(filename, img, params=None):
try:
ext = os.path.splitext(filename)[1]
result, n = cv2.imencode(ext, img, params)
if result:
with open(filename, mode='w+b') as f:
n.tofile(f)
return True
else:
return False
except Exception as e:
print(e)
return False
このコードでは、cv2.imread
をnp.fromfile
とcv2.imdecode
に、cv2.imwrite
をcv2.imencode
とnp.ndarray.tofile
に置き換えています。これにより、日本語を含むファイルパスの画像を正しく読み込み、保存することが可能になります。
この記事がPythonとOpenCVを使用して日本語ファイルパスを扱う際の参考になれば幸いです。
参考リンク:
– Python OpenCV の cv2.imread 及び cv2.imwrite で日本語を含むファイルパスを取り扱う際の問題への対処について
– 【OpenCV/Python】日本語の画像ファイル読込・保存.