画像の配列をいじって色調を変える
OpenCVのcv2.imreadで画像を取り込むと、画像1ピクセルごとの色情報が配列で読み取られます。
今回はそれを活用して、色調を変えてみます。
画像の配列について
まずOpenCVで読み取った画像をそのまま出力してみます。
# インポート import cv2 # 画像ファイルの読み込み img = cv2.imread("Lenna.jpg") # 表示 img
すると以下のように3次元の配列で表示されます。
少しわかりずらいので、縦2ピクセル、横3ピクセルの画像で説明すると、こんな配列になります。
[ [ [青, 緑, 赤], [青, 緑, 赤], [青, 緑, 赤] ], [ [青, 緑, 赤], [青, 緑, 赤], [青, 緑, 赤] ] ]
今までも何度か出てきていますが、OpenCVはBGRの順番です。間違えやすいので注意。
赤要素をなくす(0にする)
コード紹介
# インポート import cv2 import matplotlib.pyplot as plt # 画像ファイルの読み込み img = cv2.imread("Lenna.jpg") # サイズを取得 height,width,color = img.shape # 赤要素を0にする img[:, :, 2] = 0 # 配列を表示 print(img) # 画像を出力 plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
出力結果
少し解説
img[:, :, 2] = 0で、3次元目の要素2をすべて0にするということになります。 0→青、1→緑、2→赤なので、赤要素を0にするということですね。 1次元目と2次元目の「 : 」は、すべて、という意味になります。
応用
縦0~100ピクセルだけ変える
img[0:100, :, 2] = 0
縦0~100ピクセル、横100~300ピクセルだけ変える
img[0:100, 100:300, 2] = 0
青(0)と赤(2)両方0にする(つまり緑要素だけを取り出す)
img[0:100, 100:300, (0, 2)] = 0