【OpenCV】Webカメラで遊んでみた【Python】
こんにちは!こーたろーです。
OpenCVの第5回目です。
前回の動画の取扱いでは、既存の動画データを実際にプログラムで読み込んで表示させたりしました。
今回は、Webカメラを使って、カメラからの動画をリアルタイム表示していきます。
また、色味なども変更してみて遊んでみました。
Webカメラの動画表示
Webカメラの表示は、VideoCaptureの引数に、WebカメラのデバイスIDを入力することで、取り込むことができます。
このデバイスIDは、検出したものから順番に0から付与されるようで、基本的にPCのWebカメラが1台しかない場合は、”0”を引数として読み込みます。
import cv2 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() frame = cv2.resize(frame, (1000, 600)) cv2.imshow("Web Camera movie", frame) i = cv2.waitKey(1) if i == 27 or i == 13: break cap.release() cv2.destroyAllWindows()
Webカメラのフレーム情報をcapという変数で受け取って、その後表示させるWindowサイズに合わせてリサイズを行います。
そこからは、前回どうようにwhile文にて、breakするまで連続表示をさせていきます。
breakする際には、capで設定していたWebカメラをリリースしましょう。
動画の色成分の調整
ここからは、動画の色味に変化を加えていきます。
先ほどと同様にcapにWebカメラのIDを引数として、フレームのデータを引き渡します。
import cv2 import numpy as np cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() frame = cv2.resize(frame, (1000, 600)) #frame[:,:,0] = 0 #Blue frame[:,:,1] = 0 #Green #frame[:,:,2] = 0 #Red cv2.imshow("Web Camera movie", frame) i = cv2.waitKey(1) if i == 27 or i == 13: break cap.release() cv2.destroyAllWindows()
while文の中で、読み込んだフレームを毎回RGB情報を取り出して、RGBの輝度を調整してみます。
例えば、緑(Green)の色味を取り除きたい場合は、3次元目(RGB値)の1番目の値を0にします。すると、緑の色がなくなります。
同様にして、青(Blue)なら0番目、赤(Red)なら2番目に0を代入します。
そうすることによって、強制的に色の輝度が更新されます。
動画の色成分の調整2
RGBの調整ができたところで、RGBだけでは調整が難しい白黒画像の調整です。
今回おこなっているのは、赤っぽい色の部分を全て白にするようにしています。
import cv2 import numpy as np cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() frame = cv2.resize(frame, (1000, 600)) hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV_FULL) h = hsv[:,:,0] s = hsv[:,:,1] v = hsv[:,:,2] img = np.zeros(h.shape, dtype = np.uint8) img[((h < 50)| (h > 200)) & (s > 100)] = 255 cv2.imshow("Web Camera movie", img) i = cv2.waitKey(1) if i == 27 or i == 13: break cap.release() cv2.destroyAllWindows()
ここで使っているのは、cvtColorで、BGRからHSVに変換を行っています。
その中で、hsv値を調整しています。
出力結果はご覧の通りです。
OpenCVはまだまだ続きます。
ではでは。
OpenCVではじめよう ディープラーニングによる画像認識