Python3 OpenCV3で指定した色のみを抽出して表示する【動画あり!】


これは色々楽しそう。

前提

ディレクトリ構成などはこことかこことか。

 

プログラムの流れ

1 抽出する色をHSVで範囲指定する。
2 カメラでキャプチャーする
3 取得したフレーム画像をHSV変換する
4 HSV変換した画像を二値化してマスク画像を作成する。
5 マスク画像の領域を元画像から集中する。

 

inRangeメソッド

inRangeメソッドは、入力ソース画像から範囲指定した色の範囲にもとづいてマスク画像を生成する。
使い方は以下のとおり。

    # 取得する色の範囲を指定する
    lower_yellow = np.array([20, 50, 50])
    upper_yellow = np.array([100, 255, 255])

    # 指定した色に基づいたマスク画像の生成
    img_mask = cv2.inRange(img_src, lower_yellow, upper_yellow)

 

色の抽出

今回はMacBookAirのカメラでキャプチャーし、フレーム単位で色の抽出を行った。
sourceディレクトリにcolor.pyを作成した。

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while(1):

    # フレームを取得
    ret, frame = cap.read()

    # フレームをHSVに変換
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 取得する色の範囲を指定する
    lower_yellow = np.array([20, 50, 50])
    upper_yellow = np.array([100, 255, 255])

    # 指定した色に基づいたマスク画像の生成
    img_mask = cv2.inRange(hsv, lower_yellow, upper_yellow)

    # フレーム画像とマスク画像の共通の領域を抽出する。
    img_color = cv2.bitwise_and(frame, frame, mask=img_mask)

    cv2.imshow("SHOW COLOR IMAGE", img_color)

    # qを押したら終了
    k = cv2.waitKey(1)
    if k == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

実行してみる。

(opencv_python) $ python color.py

スクリーンショット 2015-08-05 10.59.01

 

動画はこちら。

 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です