OpenCV 4.xAPIの詳細な説明とC ++の例-モーション分析

最初のセクションのモーション分析

OpenCVのビデオモジュールは、KNNおよびMOG2モーション分析アルゴリズムを提供します。

1、cv :: createBackgroundSubtractorKNN


KNNアルゴリズムに基づいてバックグラウンドエクストラクタを作成します。

Ptr cv :: createBackgroundSubtractorKNN(int history = 500、double dist2Threshold = 400.0、booldetectShadows = true)

パラメータ名 パラメータの説明
歴史 履歴フレームの長さ
dist2Threshold ピクセルがサンプルに近いかどうかを判断するための、ピクセルとサンプル間の距離の2乗のしきい値。このパラメーターは、バックグラウンド更新には影響しません。
detectShadows trueの場合、アルゴリズムは影を検出してマークを付けます。少し遅くなるので、この機能が必要ない場合は、パラメータをfalseに設定してください。

クラスBackgroundSubtractorKNNは、クラスBackgroundSubtractorを継承します。このクラスでは、BackgroundSubtractorの適用がコアメソッドです。パラメータは次のように説明されています。

パラメータ名 パラメータの説明
画像 次のビデオフレーム
fgmask 出力フォアグラウンドマスクは8ビットのバイナリイメージです。
LearningRate 0から1の間の値は、バックグラウンドモデルの学習速度を示します。負のパラメータ値により、アルゴリズムは自動的に選択された学習率を使用します。0は、背景モデルがまったく更新されていないことを意味し、1は、背景モデルが最後のフレームから完全に再初期化されていることを意味します。
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;

int main()
{
    // 打开摄像头或视频
    cv::VideoCapture cap("videos/vtest.avi");
    if(!cap.isOpened()){
        cerr << "cannot open camera.\n";
        return EXIT_FAILURE;
    }

    // 创建背景提取器
    cv::Ptr<cv::BackgroundSubtractorKNN> backgroundSubtractorKNN = cv::createBackgroundSubtractorKNN();

    cv::Mat frame,fgmask,backgroundImage;
    while(cap.isOpened()){
        cap >> frame;
        if(frame.empty()){
            cerr << "cannot grab frame from camera.\n";
            break;
        }
        // 执行前景和背景分离
        backgroundSubtractorKNN->apply(frame,fgmask);
        // 获取背景图像
        backgroundSubtractorKNN->getBackgroundImage(backgroundImage);

        cv::imshow("camera",frame);
        cv::imshow("fgmask",fgmask);
        cv::imshow("background",backgroundImage);

        if(cv::waitKey(10) == 27){
            break;
        }
    }
    cv::destroyAllWindows();
    return 0;
}

ここに画像の説明を挿入

2、cv :: createBackgroundSubtractorMOG2


MOG2アルゴリズムに基づいてバックグラウンドエクストラクタを作成します。

Ptr cv :: createBackgroundSubtractorMOG2(int history = 500、double varThreshold = 16、booldetectShadows = true)

パラメータは次のとおりです。

パラメータ名 パラメータの説明
歴史 履歴フレームの長さ
varThreshold 背景モデルがピクセルを適切に記述しているかどうかを判断するための、ピクセルとモデルの間のマハラノビス距離の2乗のしきい値。このパラメーターは、バックグラウンド更新には影響しません。
detectShadows trueの場合、アルゴリズムは影を検出してマークを付けます。少し遅くなるので、この機能が必要ない場合は、パラメータをfalseに設定してください。
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;

int main()
{
    // 打开摄像头或视频
    cv::VideoCapture cap("videos/vtest.avi");
    if(!cap.isOpened()){
        cerr << "cannot open camera.\n";
        return EXIT_FAILURE;
    }

    // 创建背景提取器
    cv::Ptr<cv::BackgroundSubtractorMOG2> backgroundSubtractor = cv::createBackgroundSubtractorMOG2();

    cv::Mat frame,fgmask,backgroundImage;
    while(cap.isOpened()){
        cap >> frame;
        if(frame.empty()){
            cerr << "cannot grab frame from camera.\n";
            break;
        }
        // 执行前景和背景分离
        backgroundSubtractor->apply(frame,fgmask);
        // 获取背景图像
        backgroundSubtractor->getBackgroundImage(backgroundImage);

        cv::imshow("camera",frame);
        cv::imshow("fgmask",fgmask);
        cv::imshow("background",backgroundImage);

        if(cv::waitKey(10) == 27){
            break;
        }
    }
    cv::destroyAllWindows();
    return 0;
}

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/wujuxKkoolerter/article/details/113728362