OpenCV에서 프레임 간 차분법 구현

OpenCV를 사용하여 배경 차이



프레임간 차분법은 이동 물체를 검출하는 방법 중 하나입니다.
Python3 + OpenCV로 만든 결과입니다.

원래 데이터는 여기
(알기 어렵지만, 물결치는 물보라 느낌의 동영상입니다)


이진화 된 마스크 이미지가 여기


이것은 일단 동영상입니다.


배경 이미지 표시


그럼 샘플 프로그램입니다.

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 설치

좋은 웹페이지 즐겨찾기