python : 画像 色の抽出方法
私は普段、画像処理のプログラムを組む際、
パンダじゃないですが、私の扱っている製品が基本透明か白なため、
画像としては白と黒及びこの間の色がメインのため、
あまり色を考えることがないのですが、
画面の歪みを調整する際に、
目印として、色を付けたものを設置して使用したたのもあり
直近で使ったので、色の週出方法についてです。
今回はnumpyを使ったものです。
numpyモジュールのインポートは
import numpy as np
調べるとnumpyはnpと略して使う方が多いので私も習っています。
画像はいつものレナさんに、ペイントで青、緑、赤で落書きしたものです。
frame = cv2.imread('lena_color.jpg')
画像の読み取りは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)
ちょっと三角が汚いですね。
上の上下限の数字を変えればよくなるかもしれませんので、
興味のある方はぜひやってみてください。
数字を変えながらやると画像の奥深さの一旦が見えてくるかもしれませんよ!
次は緑、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)
次は赤、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)
この画像を撮りだした後にgrayで白黒に変更して色々と使っております。
この記事を書いていて、bitwiseとかmaskの記事を書いていなかった!?
と思いましたので、追々書いていきます。
今までにpythonについて書いた記事はここにリンクを貼ってあります。
興味があればぜひご覧ください。