OpenCVで色抽出(白)

今回は久しぶりにOpenCVを使い、色の抽出を行います。

環境・バージョン

Windows10
Python 3.6.1
OpenCV 3.3.1

素材画像の用意

白、赤、青のボールを使った頭脳戦「ボッチャ」の動画を素材とします。
Webカメラでリアルタイムでも問題ありません。

コートが緑だと、色抽出が楽です。

白を抽出してみよう

赤、青の方が簡単そうですが、いきなり白の抽出を行います。

白は色相がないので、色抽出に不向きなような気がしますが・・・

先に結果を。

十分です!

HSVに変換して評価

色の抽出には、まず色情報を分かりやすいように、色相(H)、彩度(S)、明度(V)に分けて評価できるよう、HSV空間に変換します。

HSVはデザイナー寄りの人であれば、理解しやすい分野かと思います。

白の場合、色相は関係ないので0度~360度、すべてを対象としましょう。
※OpenCV3だと、色相を0~180で指定するみたいです。

彩度と明度は、0~255で指定。
白だと、彩度は低めで45以下。明度は影も考慮すると255~100くらい?

・・・試しながら調整したほうが早いです。

白抽出コード

import cv2
import numpy as np

cap = cv2.VideoCapture('xxxxx.mp4') # 任意の動画
while(1):
    _, frame = cap.read()
    # HSVに変換
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 白のHSV範囲
    lower_white = np.array([0,0,100])
    upper_white = np.array([180,45,255])

    # 白以外にマスク
    mask_white = cv2.inRange(hsv, lower_white, upper_white)
    res_white = cv2.bitwise_and(frame,frame, mask= mask_white)

    # 再生
    cv2.imshow('res',res_white)
    k = cv2.waitKey(25) & 0xFF # 数字が小さいほど再生が速くなる

    #Q で終了
    if k == ord('q'):
        break

cv2.destroyAllWindows()

これで、動画から白を抽出できます。

HSVの値を変えれば、青でも赤でも抽出可能です。

 

意外と色抽出は簡単なので、クロマキー合成の自作とかも、気軽に楽しめそうです。

引き続き次回も同じ動画素材を使い、OpenCVで輪郭抽出します。

“OpenCVで色抽出(白)” への3件の返信

  1. こんにちは、兵庫県在住BINGEです。
    まだよくわからないので、この場所で返信いたしますが、
    前回、DOS/V機用、自作VUメーターのhtmlファイル件の返信ですが、大事なのは、このhtmlをみて、笑っていただける、人物がいる・・・・。ということです。

    コメント↓
    ———————————————————–
    VUメーターの記事を見させていただきました。
    笑いました。
    必要性とか、実用性とか超越して、かっこいいですね!
    ———————————————————–

    次回、これに、猫人形(小さいやつ)に発光ダイオードで照明をあてるつもりです・・・。(くだらん!)

    ただ、印象的なのは、これを、かっこいい!と認識してくれる、人物がいる。ということです。

  2. これを使用して色抽出してみたのですが
    break out sideループとででしまいうまくできません。
    どうすればいいですか。

    1. コードをコピペして再度試しましたが、
      break out side loopと出ずに、色抽出が動作していました。
      もし、またく動かない場合、
      インデントが変わっていたり、構文エラーが起きていないでしょうか?

      私のPythonレベルが低くて何が問題か予測できず、申し訳ないです。

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)