PythonとOpenCVを使ってRGBにに分解してみる

情報のディジタル化

こんにちは。今回は画像の色をRGBに分解して表示するプログラムを載せておきます。

ライブラリを使えるようにする

色を分解する際に、OpenCVを使うことにします。そのためには、はじめにライブラリをインストールする必要があります。

コマンドプロンプトで

pip install numpy
pip install opencv-python

を実行しておきます。

RGBに分解する

実際にRGBに分解するプログラムを掲載します。

import cv2
import numpy

red_frag = False
green_frag = False
blue_frag = False

count = 0

image = cv2.imread( 'pic01.jpg' )
height , width = image.shape[:2]

width, height = 800 , int( height * 800 / width )
width, height = ( width, height ) if height <= 450 else ( int( width * 450 / height ), 450 )

image = cv2.resize( image, ( width, height ) )
image_bgr = cv2.split( image )

zero = numpy.zeros( ( height, width ), image.dtype )
while(True):
    key = cv2.waitKey(1) & 0xFF
    if key == ord(' '):
        break
    elif  key == ord('r'):
        red_frag = not red_frag
    elif  key == ord('g'):
        green_frag = not green_frag
    elif  key == ord('b'):
        blue_frag = not blue_frag
    elif  key == ord('s'):
        cv2.imwrite( '{}.jpg'.format( count ), image )
        count += 1

    blue_component = image_bgr[0] if blue_frag else zero
    green_component = image_bgr[1] if green_frag else zero
    red_component = image_bgr[2] if red_frag else zero
    image = cv2.merge( ( blue_component, green_component, red_component ) )

    cv2.imshow( 'frame', image )
    
cv2.destroyAllWindows()

10~16行目で画像を読み込み、幅800px、高さ450px以内の大きさになるようにしています。ファイル名は’pic01.jpg’に固定しています。

21~32行目がキー操作になります。キーボードでスペースキーを押すと表示を終了します。Rキーを押すと赤の表示/非表示を切り替えることができます。同様にGキーで緑を表示/非表示を切り替え、Bキーで青を表示/非表示を切り替えることができます。はじめはいずれの色も表示しないようにしているので、いずれかのキーを押して画像が表示されるように切り替えてください。ついでの機能としてsキーを押すと、画面に表示されている画像を保存します。

34~37行目でRGB各色の表示/非表示に基づいて、画像を構成しています。なぜか、cv2.splitした結果はBGRと通常の逆順になっていることの注意が必要です。

39行目で、構成された画像を表示しています。

実行結果は

以下に、実行結果として表示された画像を、RGBすべてなし・Rだけ・Gだけ・Bだけ・G+B・R+B・R+G・R+G+Bの順に掲載します。

RGBすべてなし
Rだけ
Gだけ
Bだけ
G+B
R+B
R+G
R+G+B

ちなみに、この写真は富士山のビューポイントの一つとして有名な大渕笹場というところに行った時の写真ですが、残念なことに富士山は雲に隠れてしまっているため写っていません・・・

参考となるかわかりませんが、地図を載せておきます。

今回はこれでおしまいにします。それではまた。

Posted by 春日井 優