PythonのOpenCVで日本語ファイル名を開く方法

清親畫帖. [1] コンピュータ
出典:国立国会図書館「NDLイメージバンク」 (https://rnavi.ndl.go.jp/imagebank/)
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)
追記:20230609
書き込みに対応

コメント