python: OpenCVで動体検知

プログラミング
スポンサーリンク




こんにちは、おみです。

今回は、pythonとOpenCVを使用して、動画から動いている部分の検出(動体検知)

を行ってみたいと思います。

スポンサーリンク

やること

下記の動画ファイルから動いている部分を検出したいと思います。

↓使用するファイル

 

↓動画をダウンロードしたサイト様

Attention Required! | Cloudflare

下準備

※pythonやOpenCVのインストールは割愛します。

opencv-contrib-pythonがインストールされていない場合エラーとなる部分があるので、インストールしておきます。

pip install opencv-contrib-python

ソースコード

import cv2
import os
import sys

# 動画のパスを指定
file_path = "Elster - 35908.mp4"

# 動画が存在するかを確認
if not os.path.exists(file_path):
    print("動画が存在しません。")

# 動画を読み込む
cap = cv2.VideoCapture(file_path)

# 動画の読み込みが成功したかを判定
if not cap.isOpened():
    print("動画ファイルの読み込みに失敗しました。")
    sys.exit()

# 背景差分取得用のオブジェクトを生成
diff = cv2.bgsegm.createBackgroundSubtractorMOG()


# 動画を再生する
while True:
    # 1フレームずつ取得する
    ret, frame = cap.read()
    if not ret:
        break

    # 背景差分をマスクとして取得する
    mask = diff.apply(frame)

    # 輪郭のみを検出する
    cons = cv2.findContours(mask,
                            cv2.RETR_LIST,
                            cv2.CHAIN_APPROX_NONE)[0]

    # 輪郭を描画する
    for con in cons:
        # 描画処理
        cv2.polylines(frame, con, True, (255, 0, 0), 5)

    # 結果を出力
    cv2.imshow("Frame", frame)
    key = cv2.waitKey(30)
    if key == 27:
        break

# 終了時処理
cap.release()
cv2.destroyAllWindows()

実行すると、動いている部分を青く囲った動画が再生されます。

参考

Python/OpenCVで動体検知!動画の動いている部分を検出
有名な動画処理に「動体検知」がありますが、PythonのOpenCVを使えば簡単に実装することができます。ここでは動画ファイルに対して行うPythonとOpenCVを使った動体検知のコードを紹介します。
背景差分 — OpenCV-Python Tutorials 1 documentation

 

コメント

タイトルとURLをコピーしました