11,428 views
この記事は最終更新から 2685日 が経過しています。
1. やりたいこと
カラー画像を OpenCVでロードした場合、画像データ配列中の並び順は BGR である。
これを RGB の並び順に変更したい。
2. 本当に BGRなのかを確認
こんな画像を用意した。

この画像を OpenCVでロードし、画像データの中身をバンド別(=チャネル別)に見てみる。
因みに…
OpenCVでロードした画像データは numpy配列に格納されている。
import cv2
img = cv2.imread("band.png")
type(img)
実行結果、以下のように numpy.ndarray と表示された。
<class 'numpy.ndarray'>
よって、ロードした画像データから任意のバンドのデータを抽出するには、numpy配列に対する制御をすればよいのだ。
まずは 1バンド目は?
import cv2
import numpy as np
img = cv2.imread("band.png")
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# 1バンド目だけを取得&表示
img1 = img[:,:,0]
cv2.imshow('image', img1)
cv2.waitKey()
cv2.destroyAllWindows()
確かに B(Blue)が入っていた。

次に 2バンド目は?
# 2バンド目だけを取得&表示
img2 = img[:,:,1]
cv2.imshow('image', img2)
cv2.waitKey()
cv2.destroyAllWindows()
確かに G(Green)が入っていた。

最後に 3バンド目は?
# 3バンド目だけを取得&表示
img3 = img[:,:,2]
cv2.imshow('image', img3)
cv2.waitKey()
cv2.destroyAllWindows()
確かに R(Red)が入っていた。

cv2.imread()でロードした画像データの中身は、確かに BGR の順に格納されていた。
3. やってみる
(1) OpenCVの関数で BGR → RGB変換
便利な関数が用意されている。
import cv2
img = cv2.imread("band.png")
# OpenCVの関数 cvtColor()でバンド変換する。
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
(2) numpy配列のスワップで実現
前述の「2. 本当に BGRなのかを確認」で確認した通り、画像データ配列の3次元目には以下のように格納されている。
[][][0] : B (Blue)
[][][1] : G (Green)
[][][2] : R (Red)
よって…
[][][0]と [][][2]を入れ替えてやればよいのだ。
これは numpy配列に対する制御で簡単に書ける。
import cv2
import numpy as np
img = cv2.imread("band.png")
# 画像データの 3次元目を 2→1→0 の順に入れ替える。
imgRGB = img[:,:,[2,1,0]]
試しに PILで RGBカラー画像として表示してみる。
# 表示 from PIL import Image imgP = Image.fromarray(imgRGB) imgP.show()

OKだ!
アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済2026-01-24: 0回 2026-01-23: 0回 2026-01-22: 0回 2026-01-21: 1回 2026-01-20: 0回 2026-01-19: 6回 2026-01-18: 0回