PythonのOpenCVでパスに日本語を含むファイルは開くことが出来ないようです。
日本語を含まないパスであれば問題なく読み書きできるので、画像ファイルをテンポラリファイルにコピー(移動)して開くという酷い方法を思いついたので実践してみます。
#!/usr/bin/env python3
# coding: utf8
import cv2
import shutil
import os
import tempfile
# 読み込み関数
def my_cv2_imread(filename: str, flags: int = cv2.IMREAD_COLOR):
t = tempfile.NamedTemporaryFile()
temp_file_name = t.name
t.close()
shutil.copyfile(filename, temp_file_name)
im = cv2.imread(temp_file_name, flags)
os.remove(temp_file_name)
return im
# 書き込み関数
def my_cv2_imwrite(filename: str, im):
t = tempfile.NamedTemporaryFile()
_, ext = os.path.splitext(filename)
temp_file_name = t.name + ext
t.close()
result = cv2.imwrite(temp_file_name, im)
shutil.move(temp_file_name, filename)
return result
# 読み込み
img = my_cv2_imread("画像ファイル.png")
# 表示
cv2.imshow("Image", img)
cv2.waitKey(0)
# 書き込み
my_cv2_imwrite("画像ファイル2.png", img)
動きましたがテンポラリファイルを作成するのは効率が悪いので以下のサイト様の方法をお勧めします。
【OpenCV/Python】日本語の画像ファイル読込・保存
OpenCVで画像ファイルを開くとき、ファイル名やパスに日本語が含まれていると、画像ファイルを開いてくれません。 試しに以下のようなコードを実行すると、エラーが起き実行できません。 import cv2 # OpenCVで画像ファイルを開く
追記:20230609
書き込みに対応
コメント