Search code examples
c++opencvbackground-subtraction

OpenCV Background Substraction c++


I've create a background Subsctractor (MOG) and now, I want to change some parameters:

Ptr< BackgroundSubtractor> pMOG, pMOG2;
pMOG = new BackgroundSubtractorMOG();
pMOG.set("varThreshold",5); //does't work
pMOG->operator()(inputImage, outputImage); //works, but the output is not enought "sensitive"

Has anyone an idea how I could deal with this? I want to change the threshold value, because it returns an mask, that does not always detect my moving objects (e.g. if their color is nearly the backgrounds color).

Thanks!


Solution

  • That's because BackgroundSubtractorMOG doesn't have a parameter named varThreshold. You probably wanted to set this parameter on BackgroundSubtractorMOG2.

    The parameters for BackgroundSubtractorMOG are:

    "history"
    "nmixtures"
    "backgroundRatio"
    "noiseSigma"
    

    while for BackgroundSubtractorMOG2 are:

    "history"
    "nmixtures"
    "varThreshold"
    "detectShadows"
    "backgroundRatio"
    "varThresholdGen"
    "fVarInit"
    "fVarMin"
    "fVarMax"
    "fCT"
    "nShadowDetection"
    "fTau"
    

    You can find these info in video_init.cpp (checked for OpenCV version 2.4.9).


    You can also set some parameters directly into the constructor, which is probably the safest way.