c – 无法在BackgroundSubtractorMOG2中设置用户参数

前端之家收集整理的这篇文章主要介绍了c – 无法在BackgroundSubtractorMOG2中设置用户参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
OpenCV库版本2.42.我想在BackgroundSubtractorMOG2对象中设置一个参数,例如
BackgroundSubtractorMOG2 bgr;  

// the following doesn't work because 'nmixtures','backgroundRatio' 
// and 'fVarMin' are a protected members.
bgr.nmixtures = 3;   
bgr.backgroundRatio = 0.9;
bgr.fVarMin = 5; 

// the following works 
bgr.set('nmixtures',3); 

// both of the following lines will give a run-time error 
// `Access violation reading location 0x0000000000000008.`
bgr.set("backgroundRatio",0.9);  
bgr.set("fVarMin",5);

backgroundRatio和fVarMin是控制算法的参数.用户应该能够根据documentation更改这些参数.

如何设置BackgroundSubtractorMOG2的参数?

编辑正如下面的答案中正确提到的,这是OpenCV中的一个错误.该错误已在OpenCV版本2.4.6中修复.

解决方法

我刚刚查看了OpenCV源代码,并在文件/modules/video/src/video_init.cpp中找到了有趣的初始化.这里是:
CV_INIT_ALGORITHM(BackgroundSubtractorMOG2,"BackgroundSubtractor.MOG2",obj.info()->addParam(obj,"history",obj.history);
    obj.info()->addParam(obj,"nmixtures",obj.nmixtures);
    obj.info()->addParam(obj,"varThreshold",obj.varThreshold);
    obj.info()->addParam(obj,"detectShadows",obj.bShadowDetection));

似乎可以使用方法集仅设置这四个参数.

还要看一下文件modules / video / src / bgfg_gaussmix2.cpp,它有一个BackgroundSubtractorMOG2类.它有以下字段:

float fVarInit;
float fVarMax;
float fVarMin;
//initial standard deviation  for the newly generated components.
//It will will influence the speed of adaptation. A good guess should be made.
//A simple way is to estimate the typical standard deviation from the images.
//I used here 10 as a reasonable value

并且值fVarMin(您想要更改)设置为:

fVarMin = defaultVarMin2

在两个构造函数中.以下是所有这些:

static const float defaultVarInit2 = 15.0f; // initial variance for new components
static const float defaultVarMax2 = 5*defaultVarInit2;
static const float defaultVarMin2 = 4.0f;

有趣的是,这个值没有在任何其他文件中使用,所以现在似乎无法改变它.您可以将此问题直接发布到OpenCV bugtracker.

猜你在找的C&C++相关文章