今回は久しぶりに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で輪郭抽出します。
こんにちは、兵庫県在住BINGEです。
まだよくわからないので、この場所で返信いたしますが、
前回、DOS/V機用、自作VUメーターのhtmlファイル件の返信ですが、大事なのは、このhtmlをみて、笑っていただける、人物がいる・・・・。ということです。
コメント↓
———————————————————–
VUメーターの記事を見させていただきました。
笑いました。
必要性とか、実用性とか超越して、かっこいいですね!
———————————————————–
次回、これに、猫人形(小さいやつ)に発光ダイオードで照明をあてるつもりです・・・。(くだらん!)
ただ、印象的なのは、これを、かっこいい!と認識してくれる、人物がいる。ということです。
これを使用して色抽出してみたのですが
break out sideループとででしまいうまくできません。
どうすればいいですか。
コードをコピペして再度試しましたが、
break out side loopと出ずに、色抽出が動作していました。
もし、またく動かない場合、
インデントが変わっていたり、構文エラーが起きていないでしょうか?
私のPythonレベルが低くて何が問題か予測できず、申し訳ないです。