OpenCVで背景差分
※追記:OpenCV 3.4.1版の記事は下記リンク。使えるアルゴリズムが増えている。
以降はOpenCV 2.4.7のサンプル。
背景差分
固定カメラで移動物体の検出をするのに有効な手法.OpenCV2.4.7では混合正規分布(Mixture of Gaussian Distribution, MoG)によるアルゴリズム,Godbehere,Matsukawa,Goldbergによるアルゴリズム(GMG)が用意されているので試してみる.
サンプルコード
BackgroundSubtractorMOGクラス,BackgroundSubtractorMOG2クラスおよびBackgroundSubtractorGMGクラスで背景差分の計算ができる.
アルゴリズムによってパラメータ等が違うが,基本的な計算は共通の書き方で使用できる.以下にサンプルコードを示す.
#include <opencv2/opencv.hpp> void main() { cv::VideoCapture cap = cv::VideoCapture("test.avi"); // 背景差分計算用オブジェクトの生成 cv::BackgroundSubtractorGMG backGroundSubtractor; //cv::BackgroundSubtractorMOG backGroundSubtractor; //cv::BackgroundSubtractorMOG2 backGroundSubtractor; while (cv::waitKey(1) == -1) { cv::Mat frame, foreGroundMask, output; // 画像取得 cap >> frame; if (frame.empty()) break; // マスク画像の取得 backGroundSubtractor(frame, foreGroundMask); // 入力画像にマスク処理を行う cv::bitwise_and(frame, frame, output, foreGroundMask); cv::imshow("output", foreGroundMask); } }