LoginSignup
4
0

More than 3 years have passed since last update.

【Numpy】BGR画像をRGB画像へ変換

Posted at

目的

画像データのNumpy配列をBGRからRGBに可逆変換する。

Opencvで画像を取り込み、Numpy配列としてデータをコネコネした後、
matplotlibで表示して色がおかしい...となることが多いのでメモ。

事前準備

インポート

必要なライブラリをインポート

import os
import numpy as np
import cv2
import matplotlib.pyplot as plt

画像の読み込み

今回は画像3枚を読み込む。
ちなみに読み込む画像はこんな感じ
original.png

# 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-img.png

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()

ちゃんと元のRGB画像にもどせました。
original.png

なにしてる?

「:, :, :, 」は行列の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])
4
0
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
0