画像処理はじめました。

AI/AR/VRという近未来的な言葉に惹かれ、その技術分野に参戦するために立ち上げたブログです。日々の格闘結果を記録に残してゆこうと思います。

1-1 「B/G/Rの入れ替え」

モチベーション

画像の色合いを変更して、どんな雰囲気になるのか確認してみたい。
例えば、以下のような用途がありそうです。

  • 花の色
    • 赤い花だけど、青色の花だったらどうかな?
  • 看板の文字の色
    • 看板の文字の色を赤にしてみるとどうかな?
    • 背景が黄色だとどんな雰囲気になるかな?

やり方

カラー画像を読み込み、読み込んだ画像のB/G/Rを入れ替えれば実現できます。
この方法は、画像の色バランスを維持したまま色を入れ替えるので、画像変換後も自然な画像として得られます。

プログラム

カラー画像をPILで取得し、Numpy配列化した後、RGBの色情報をスライスを用いて入れ替えます。入れ替える色は、青色→緑色、 緑色→赤色、 赤色→青色 としました。

#!/usr/bin/python
# -*- coding: utf-8 -*-

# カラー画像のR,G,Bの色情報を入れ替える。

from PIL import Image 
import numpy as np
from matplotlib import pylab as plt

# 画像の読み込み
im = np.array(Image.open('input.bmp'))
print(im.shape, im.dtype)

# ((968L, 1296L, 3L), dtype('uint8'))


# 画像の表示
plt.imshow(im)
plt.show()

# 色の入れ替え
im_swap = im.copy()
im_swap[:,:,1] = im_swap[:,:,2] # Blue -> GReen
im_swap[:,:,2] = im_swap[:,:,0] # Red -> Blue
im_swap[:,:,0] = im[:,:,1]      # Green -> Red

print(im_swap.shape, im_swap.dtype)


# 画像の表示
plt.imshow(im_swap)
plt.show()


#保存
Image.fromarray(im_swap).save('output.bmp')

実行結果

f:id:genetaka1810:20191026151717p:plain

参考

別な画像でも試してみました。
赤を青に、緑を赤に入れ替えてます。

元画像の雰囲気を損なわずに、色合いのみ変更できている様子がわかるかと思います。

f:id:genetaka1810:20191026152512p:plain