[cv2.imread] と [cv2.imdecode] の使用法

パスに中国語が含まれる画像は cv2.imread で直接読み込むとエラーが報告されるのですが、前回、偉い人が cv2.imdecode を使えば普通に読み込めるという話を見たので、ちょっと気になったので今日は2 つの使用法と違いを記録します。

目次

 1. 2つの画像読み取り方法の比較

 2. 2つの画像保存方法の比較

 


 1. 2つの画像読み取り方法の比較

  • cv2.imread は通常どおり画像を読み取ります
import cv2
path = '/data/北京/beijing.png'
img = cv2.imread(path)

上記のコードを実行するとエラーが報告されます。

  • cv2.imdecode はメモリから画像を読み取ります
import cv2
path = '/data/北京/beijing.png'
arr = np.fromfile(path, dtype=np.uint8)
img = cv2.imdecode(arr, flags=cv2.IMREAD_COLOR)

上記のコードを実行すると、成功しました。

また、imdecode で得られる画像バンドの順序が BGR ではなく RGB である点が opencv との違いです。

機能の説明:

np.decode は  メモリ内のバッファから画像を読み取ります

np.fromfile は、 テキストまたはバイナリ ファイル内のデータを配列に構築します。


 2. 2つの画像保存方法の比較

  • cv2.imwrite は通常どおり画像を読み取ります
import cv2
out_path = '/data/北京/beijing.png'
cv2.imwrite(out_path,img)

上記のコードを実行するとエラーが報告されます。

  • cv2.imdecode はメモリから画像を読み取ります
import cv2
out_path = '/data/北京/beijing.png'
arr = cv2.imencode('png',img)
out[1].tofile(out_path)

上記のコードを実行すると、成功しました。

 機能の説明:

cv2.encode は 画像をメモリ バッファにエンコードします。

np.tofile は、 配列内のデータをバイナリ形式でファイルに書き込みます

整理するのは簡単ではありません。ワンクリック 3 つのリンクへようこそ!

おすすめ

転載: blog.csdn.net/qq_38308388/article/details/129199454