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の順に掲載します。
ちなみに、この写真は富士山のビューポイントの一つとして有名な大渕笹場というところに行った時の写真ですが、残念なことに富士山は雲に隠れてしまっているため写っていません・・・
参考となるかわかりませんが、地図を載せておきます。
今回はこれでおしまいにします。それではまた。
ディスカッション
コメント一覧
まだ、コメントがありません