WindowsのOpenCV Pythonで日本語(UTF-8)を含むパスをimread/imwriteで使用できないときの対応

この記事は公開から2年以上経過しています。

Windows上のOpenCV Pythonのimread/imwriteで日本語(UTF-8)を含むパスが使用できなかったので、解決策についての備忘録。


問題

Windows版のOpenCV Pythonで日本語を含むパスからimread()で画像ファイルを読み込もうとすると、読み込み結果がNoneになりターミナルに

Can’t open/read file: check file path/integrity

のような警告が表示される(imwrite()はファイルが書き込まれない)。


原因

Windows版のOpenCVはASCIIコード以外の文字コードを正しく認識できない?
※参考ウェブサイトのGitHub Issue参照。


対応

  • 画像の読み込みはimread()の代わりにimdecode()とnumpyのfromfile()
  • 画像の書き込みはimwrite()の代わりにimencode()tofile()

    を利用する。

    import cv2
    import numpy as np
    
    img = cv2.imdecode(
        np.fromfile(r'c:\temp\画像\image.png', dtype=np.uint8),
        cv2.IMREAD_UNCHANGED)
    
    retval, buf = cv2.imencode('*.png', img)
    buf.tofile(r'c:\temp\画像\saved_image.png')


参考ウェブサイトなど

  • GitHub Issues
    imread supports Non-ASCII filename in opencv-python+Windows #18305

  • stack overflow
    How do I read an image from a path with Unicode characters?

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする