ITいろいろ

プログラミングやクラウド、データ解析など、ITにかかわることをいろいろと書いています。

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を追加してみましょう。(コード紹介のコメントアウトを外します。

すると青の要素がなくなった画像が、動画として流れます。