python : 画像 色の抽出方法

私は普段、画像処理のプログラムを組む際、

パンダじゃないですが、私の扱っている製品が基本透明か白なため、

画像としては白と黒及びこの間の色がメインのため、

あまり色を考えることがないのですが、

画面の歪みを調整する際に、

目印として、色を付けたものを設置して使用したたのもあり

直近で使ったので、色の週出方法についてです。

 

今回はnumpyを使ったものです。

numpyモジュールのインポートは

import numpy as np

調べるとnumpyはnpと略して使う方が多いので私も習っています。

画像はいつものレナさんに、ペイントで青、緑、赤で落書きしたものです。

frame = cv2.imread('lena_color.jpg')

 

f:id:Kangkang1981:20200310225956j:plain

画像の読み取りはopencvであるため、

画像の順番がBGRになっています。下の[150,0,0]はそのまま[B,G,R]という意味です。

 

ではまず青から

#BGRのBlueのフィルター

画像の下限値を決めます。
blueLower = np.array([150, 0, 0]) 

画像の上限を決めます。
blueUpper = np.array([255, 100, 100])

上で決めた上下限をもとに、マスクを作成
blue_mask = cv2.inRange(frame, blueLower, blueUpper) 

マスクの合成
result_blue = cv2.bitwise_and(frame, frame, mask=blue_mask) 

画像を保存すると

cv2.imwrite('lena_blue.jpg',result_blue)

f:id:Kangkang1981:20200310230311j:plain

ちょっと三角が汚いですね。

上の上下限の数字を変えればよくなるかもしれませんので、

興味のある方はぜひやってみてください。

数字を変えながらやると画像の奥深さの一旦が見えてくるかもしれませんよ!

次は緑、BGRのGreenの場合は
greenLower = np.array([0, 150, 0])
greenUpper = np.array([100, 255, 100])
green_mask = cv2.inRange(frame, greenLower, greenUpper) 
result_green = cv2.bitwise_and(frame, frame, mask=green_mask) 

cv2.imwrite('lena_green.jpg',result_green)

f:id:Kangkang1981:20200310230523j:plain

次は赤、BGRのRedです。

redLower = np.array([0, 0, 200]) 
redUpper = np.array([100, 100, 255]) 
red_mask = cv2.inRange(frame, redLower, redUpper) 
result_red = cv2.bitwise_and(frame, frame, mask=red_mask)

cv2.imwrite('lena_red.jpg',result_red)

f:id:Kangkang1981:20200310230554j:plain

 

この画像を撮りだした後にgrayで白黒に変更して色々と使っております。

この記事を書いていて、bitwiseとかmaskの記事を書いていなかった!?

と思いましたので、追々書いていきます。

 

今までにpythonについて書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。