(OpenCV+Python)-ターゲットトラッキング、バックグラウンドセグメンテーションツール。KNN、MOG2、GMG
2022-02-28 23:35:45
OpenCV には,前景と背景を分割する際に便利な BackgroundSubtractor というクラスがあります.
OpenCV3 には,K-Nearest (KNN), Mixture of Gaussians (MOG2), Geometric Multigid (GMG) の3種類の背景スプリッタが用意されています.
BackgroundSubtractorクラスは動画解析に特化しており、すなわち、BackgroundSubtractorクラスはフレームごとに環境を"学習"し、タイムラプス法による運動解析の結果を向上させるために使用することができます。
import cv2
camera = cv2.VideoCapture(0) # parameter 0 means the first camera
mog = cv2.createBackgroundSubtractorMOG2()
while (1):
grabbed, frame_lwpCV = camera.read()
fgmask = mog.apply(frame_lwpCV)
cv2.imshow('frame', fgmask)
key = cv2.waitKey(1) & 0xFF
# Press the 'q' key to exit the loop
if key == ord('q'):
break
camera.release()
cv2.destroyAllWindows()
<イグ
BackgroundSubtractorクラスのもう一つの重要な機能は、影を計算する機能である。これは、ビデオフレームを正確に読み取るために絶対に必要な機能です。影を検出することで、検出された画像の影の部分を(閾値処理を用いて)除外し、実際の特徴に注目することができます。
import cv2
import numpy as np
camera = cv2.VideoCapture(0) # parameter 0 means the first camera
bs = cv2.createBackgroundSubtractorKNN(detectShadows=True)
es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
while True:
grabbed, frame_lwpCV = camera.read()
fgmask = bs.apply(frame_lwpCV) # background splitter, this function computes the foreground mask
# binary thresholding, the foreground mask contains the white value of the foreground as well as the gray value of the shadow, in thresholding the image, all pixels that are not pure white (244~255) are set to 0 instead of 255
th = cv2.threshold(fgmask.copy(), 244, 255, cv2.THRESH_BINARY)[1]
# The following is the same method as in basic motion detection, identifying the target, detecting the contours, and drawing the results on the original frame
dilated = cv2.dilate(th, es, iterations=2) # morphological expansion
image, contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # This function calculates the contours of a target in an image
for c in contours:
if cv2.contourArea(c) > 1600:
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(frame_lwpCV, (x, y), (x + w, y + h), (255, 255, 0), 2)
cv2.imshow('mog', fgmask)
cv2.imshow('thresh', th)
cv2.imshow('detection', frame_lwpCV)
key = cv2.waitKey(1) & 0xFF
# Press the 'q' key to exit the loop
if key == ord('q'):
break
# When everything is done, release the capture
camera.release()
cv2.destroyAllWindows()
<イグ
左から順に、検出されたモーションターゲット、背景セグメンテーション、閾値処理後の背景セグメンテーション
関連
-
アクセス違反の書き込み位置例外のブラインド解決法
-
OpenCV-DFT の最適サイズ cv::getOptimalDFTSize
-
C++ベースのOpenCV共通関数
-
opencv VideoCaptureの問題。ストリームを停止できない。デバイスに不適切な ioctl
-
OpenCV演習 - 顔検出と顔画像抽出
-
背景抽出 - パラメータの変更とガウス混合モデルでの使用 BackgroundSubtractorMOG2
-
opencv3.0とopencv2.4のガウス混合モデルbackgroundSubtractorMOG2の使い分けについて
-
Opencvにおける矩形関数とRect関数の使用法
-
opencv notes - cvCreateImage 関数の説明
-
cvCvtColor の使用法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン