この記事は公開から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?
以上です。