Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

OpenCVでフレーム間差分法を実装

OpenCVを使って背景差分

フレーム間差分法は、移動物体の検出方法の1つです。
Python3 + OpenCV で作った結果です。

元のデータはこちら
(わかりづらいですが、波打ち際の水しぶきって感じの動画です)
スクリーンショット 2020-06-17 22.54.43.jpg

二値化したマスク画像がこちら
スクリーンショット 2020-06-17 22.39.08.jpg

これ、一応動画です
スクリーンショット 2020-06-17 22.40.01.jpg

背景画像の表示
スクリーンショット 2020-06-17 22.40.50.jpg

ではサンプルプログラムです。

movieSample.py
import cv2
import numpy as np
import time

i = 0      # カウント変数
th = 30    # 差分画像の閾値

# 動画ファイルのキャプチャ
cap = cv2.VideoCapture("/Users/.../.../.../movies/movieSample.mp4")

# 最初のフレームを背景画像に設定
ret, bg = cap.read()

# グレースケール変換
bg = cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY)

while(cap.isOpened()):
    # フレームの取得
    ret, frame = cap.read()

    # グレースケール変換
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 差分の絶対値を計算
    mask = cv2.absdiff(gray, bg)

    # 差分画像を二値化してマスク画像(モノクロ)を算出
    mask[mask < th] = 0
    mask[mask >= th] = 255

    # マスク画像を表示
    cv2.imshow("Mask", mask)
    # フレーム画像を表示(モノクロ)
    cv2.imshow("Flame", gray)
    # 背景画像を表示(モノクロ)
    cv2.imshow("Background", bg)

    # 待機(0.03sec)
    time.sleep(0.03)
    i += 1    # カウントを1増やす

    # 背景画像の更新(一定間隔)
    if(i > 30):
        ret, bg = cap.read()
        bg = cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY)
        i = 0  # カウント変数の初期化

    # xキーが押されたら途中終了
    if cv2.waitKey(1) & 0xFF == ord('x'):
        break

cap.release()
cv2.destroyAllWindows()

試しにOpenCVは別途インストールが必要かもしれません。
環境に合わせてトライしてみてください。
Macをご利用の方ならターミナルから

$ python3 -m pip install opencv-python [ENTER]
でいけるんじゃないかな、と思います。

インストールについてはK Igarashiさんが紹介してくださっています。
pip で OpenCV のインストール

ProOJI
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away