目的
画像データのNumpy配列をBGRからRGBに可逆変換する。
Opencvで画像を取り込み、Numpy配列としてデータをコネコネした後、
matplotlibで表示して色がおかしい...となることが多いのでメモ。
事前準備
インポート
必要なライブラリをインポート
import os
import numpy as np
import cv2
import matplotlib.pyplot as plt
画像の読み込み
今回は画像3枚を読み込む。
ちなみに読み込む画像はこんな感じ
# 3枚の256x256xRGB画像を読み込むための行列
imgs = np.ndarray((3, 256, 256, 3))
for i, img in enumerate(os.listdir()):
# .pngファイルのみリードする。
if os.path.splitext(img)[1] == '.png':
imgs[i] = cv2.imread(img)
表示してみる
画像の準備ができたので表示する。
for i in range(len(imgs)):
plt.subplot(1, 3, i+1)
plt.title(img_names[i])
plt.imshow(imgs[i])
plt.show()
opencvで読み込んでいるので表示されるのはRBGの画像ではなく、BGRの画像。
BGRに変換して表示する
変換
rgb_imgs = imgs[:,:,:,::-1]
rgb_imgs.shape # -> (3, 256, 256, 3)
表示してみる
for i in range(len(rbg_imgs)):
plt.subplot(1, 3, i+1)
plt.title(img_names[i])
plt.imshow(rbg_imgs[i])
plt.show()
なにしてる?
「:, :, :, 」は行列のshape、つまりここでは3枚の256x256の部分に該当し、
「::-1」の部分で3チャンネル逆順で取り出している。
rgb_imgs = imgs[:,:,:,::-1]
x = np.array((1,2,3))
x # -> array([1, 2, 3])
x[::-1] # -> array([3, 2, 1])