OpenCVで動画を扱う
OpenCVは動画の扱いも比較的楽に行えます。
少しずつ動画処理の記事も増やしていこうと思います。
コード紹介
# import import cv2 import time # 動画データを取り込む # 0以上の数字:Webカメラを入力とする(どの数字かはPC環境による) # './sample.mp4'など動画ファイルを指定:動画ファイルを入力とする cap = cv2.VideoCapture(0) # たまにエラーになるため、表示前に3秒待つ time.sleep(3) while True: # カメラの画像を読み込む _, frame = cap.read() # 青色要素を0にする # frame[:,:,0] = 0 # ウィンドウに画像を出力 cv2.imshow('Camera', frame) # ESCかEnterキーが押されたらループを抜ける k = cv2.waitKey(100) & 0xFF # 100msec確認 if k == 27 or k == 13: break cap.release() # カメラを開放 cv2.destroyAllWindows() # ウィンドウを破棄
出力結果
少し解説
cap = cv2.VideoCapture(0)で動画を取得する準備をします。 中の0は、PCによって変わります。 (私のSurfaceは0がアウトカメラ、1がインカメです。USBでWebカメラを接続すると、おそらく2で取得できると思います)
while True:は無限ループの意味です。
_, frame = cap.read()で動画から画像ファイルとしてキャプチャし、frameに格納します。 1つ目は読み込めたかどうか、True,Falseで返すものですが、今回は使わないので「_」としています。
cv2.waitKey(100) & 0xFFは100msec(0.1秒)キーボードの入力を待つ、ということで、何も入力しなければ次に行く、つまりループに戻ってまた動画をキャプチャして・・・、という繰り返しです。
少し改造
解説で説明したように、結局は動画も1枚1枚の画像にしています。
そのため、今までの画像処理がそのまま使えます。
例えばpython frame[:, :, 0] = 0
を追加してみましょう。(コード紹介のコメントアウトを外します。
すると青の要素がなくなった画像が、動画として流れます。