概要
- opencv を使っていて、表題のエラーが発生した。
- 画像ファイル自体は確実に存在していることを確認したのに、エラー文には、ファイルが開けないようと書かれている。
- 原因がわからなくて困っていたが、なんとか原因を特定できたので共有する。
環境
項目 | versionなど |
---|---|
OS | Windows10 |
python | 3.8.10 (pyenv-win でインストール) |
opencv-python | 4.6.0.66 |
terminal | GitBash, VSCode |
GitBash 上で実行したときも、VSCode 上で実行したときも、全く同じエラーが発生していたので、おそらく Windows OS 上で cv2.imread()
を実行すると同様の事象が発生すると思われる。
解決方法概要
- 開きたいファイルの名前(path 含む)を、半角の英数記号のみにすればよい。
エラー発生状況
cv2 で、日本語名のついた画像ファイルを読み込もうとしたら以下のようなエラーが発生していた。
powershell
> python
>>> import cv2
>>> path: str = "C:\\Users\\...\\日本語ファイル.jpg"
>>> im = cv2.imread(path)
[ WARN:0@270.836] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_('C:\Users\...\日本語ファイル.jpg'): can't open/read file: check file path/integrity
試しに raw 文字列を渡しても同じ結果になった。
powershell
>>> path: str = r"C:\Users\...\日本語ファイル.jpg"
>>> im = cv2.imread(path)
[ WARN:0@270.836] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_('C:\Users\...\日本語ファイル.jpg'): can't open/read file: check file path/integrity
解決方法
ファイル名を日本語から英数字のみの名前に書き換えてあげたら、何事もなく読み込まれた。
まず、ファイル名を depicted.jpg
に書き換えておいた。そして以下を実行( ˙︶˙)وグッ!
powershell
>>> path: str = r"C:\Users\...\depicted.jpg"
>>> im = cv2.imread(r"C:\Users\...\depicted.jpg")
>>> im
array([[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...
そしたら読み込めた。。。
参考
以下の記事には、 opencv だと読み込めないと書いてあるけれど、 Ubuntu であれば読み込めていたので、 windows 特有の問題のような気がする🤔