福岡人データサイエンティストの部屋

データサイエンスを極めるため、日々の学習を綴っています。

【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ではじめよう ディープラーニングによる画像認識