微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

原文地址:https://www.jb51.cc/c/120192.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐