OpenCV에서 프레임 간 차분법 구현
OpenCV를 사용하여 배경 차이
프레임간 차분법은 이동 물체를 검출하는 방법 중 하나입니다.
Python3 + OpenCV로 만든 결과입니다.
원래 데이터는 여기
(알기 어렵지만, 물결치는 물보라 느낌의 동영상입니다)
이진화 된 마스크 이미지가 여기
이것은 일단 동영상입니다.
배경 이미지 표시
그럼 샘플 프로그램입니다.
movieSample.pyimport 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 설치
Reference
이 문제에 관하여(OpenCV에서 프레임 간 차분법 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ProOJI/items/f38865917dd9abb4bb53
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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()
Reference
이 문제에 관하여(OpenCV에서 프레임 간 차분법 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ProOJI/items/f38865917dd9abb4bb53텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)