4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python OpenCV】 ファイル名が日本語・パスに日本語が含まれる画像を扱う方法

Posted at

OpenCVは日本語を扱えない

OpenCVはANSI文字列以外の文字を扱えない仕様になってます。
つまり、日本語を含むファイル名・パスを扱えません...。

実行環境

Python : 3.10.1
OpenCV : 4.5.5

エラー

[ WARN:0@14.898] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp (239) 
cv::findDecoder imread_('E:/my/蛻カ菴懃黄/map.png'): can't open/read file: check file path/integrity
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'

対策方法

Pillowで画像ファイルを開き、OpenCV(NumPyのndarray)に変換して対策します

import numpy as np
from PIL import Image

# Pillow 画像読込
pilimg = Image.open("path")

# Pillow -> NumPy
img = np.array(pilimg)

# カラー画像の場合、RGB -> BGR変換する
if img.ndim == 3:
    img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

Pillowでは、カラー画像の場合RGB順にデータが格納されていくので、cvtColorでOpenCVの形式(BGR)へ変換します。
※NumPyのほうが画像読込が平均処理時間が早いですが、画像保存の際の平均処理時間はPillowが早いので、今回はPillowを使用しています。(画像読込はNumPy、保存はPillowと使い分けるのが得策かも?)

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?