- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 OpenCV 进行前景检测,但我想知道是否有人可以提供帮助。问题出在这两个参数上:
bst.apply(currentFame, foregroungMask, learnRate);//-1表示auto,取值范围0~1
bst.setBackgroundRatio(double ratio)//默认为 0.8xxx
问题是这两个参数是否相同,如果答案是NO那么第二个参数能做什么?
当我看到 BackgroundSubtractorKNN
类中没有 setBackgroundRatio(double ratio)
方法时,问题就来了,但它只出现在 BackgroundSubtractorMOG2
类。但是它们在 apply()
方法中都有学习率参数。
注意:我在 Java 中使用 OpenCV
最佳答案
不,两者不一样。
学习率:
0 到 1 之间的值,表示背景模型的学习速度。负参数值使算法使用一些自动选择的学习率。 0 表示背景模型根本没有更新,1 表示背景模型从上一帧开始完全重新初始化。
比率:
BackgroundSubtractorMOG2
和 BackgroundSubtractorKNN
是两种不同背景减法算法的两种不同实现。因此,BackgroundSubtractorKNN
算法不需要 setBackgroundRatio
。这个参数没怎么查到,看了这个算法的代码好像是一个总权重封顶参数。不允许总重量超过此阈值。从 C++ impelentation 中查看这段代码:
void BackgroundSubtractorMOG2Impl::getBackgroundImage(OutputArray backgroundImage) const
{
if (opencl_ON)
{
CV_OCL_RUN(opencl_ON, ocl_getBackgroundImage(backgroundImage))
opencl_ON = false;
return;
}
int nchannels = CV_MAT_CN(frameType);
CV_Assert(nchannels == 1 || nchannels == 3);
Mat meanBackground(frameSize, CV_MAKETYPE(CV_8U, nchannels), Scalar::all(0));
int firstGaussianIdx = 0;
const GMM* gmm = bgmodel.ptr<GMM>();
const float* mean = reinterpret_cast<const float*>(gmm + frameSize.width*frameSize.height*nmixtures);
std::vector<float> meanVal(nchannels, 0.f);
for(int row=0; row<meanBackground.rows; row++)
{
for(int col=0; col<meanBackground.cols; col++)
{
int nmodes = bgmodelUsedModes.at<uchar>(row, col);
float totalWeight = 0.f;
for(int gaussianIdx = firstGaussianIdx; gaussianIdx < firstGaussianIdx + nmodes; gaussianIdx++)
{
GMM gaussian = gmm[gaussianIdx];
size_t meanPosition = gaussianIdx*nchannels;
for(int chn = 0; chn < nchannels; chn++)
{
meanVal[chn] += gaussian.weight * mean[meanPosition + chn];
}
totalWeight += gaussian.weight;
if(totalWeight > backgroundRatio)
break;
}
float invWeight = 1.f/totalWeight;
switch(nchannels)
{
case 1:
meanBackground.at<uchar>(row, col) = (uchar)(meanVal[0] * invWeight);
meanVal[0] = 0.f;
break;
case 3:
Vec3f& meanVec = *reinterpret_cast<Vec3f*>(&meanVal[0]);
meanBackground.at<Vec3b>(row, col) = Vec3b(meanVec * invWeight);
meanVec = 0.f;
break;
}
firstGaussianIdx += nmixtures;
}
}
meanBackground.copyTo(backgroundImage);
}
在 c++ 实现中,backgroundRatio 用于限制其下的权重。默认 0.8。我认为使用这个默认值你会得到预期的结果
在 opencv background_segm.hpp 文件中发现有趣的注释,它似乎不太重要,标准做法是使用默认值:
/////////////////////////
// less important parameters - things you might change but be carefull
////////////////////////
float backgroundRatio;
关于opencv - Background Subtraction OpenCV这两个参数有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39694694/
我正在用java创建一个分数类。该程序采用整个分数表达式,并根据带有 switch 语句的运算符执行操作。我一切正常,除了当程序给出一个减法表达式(即 -1/2--1/2)时。当我测试这个表达式时,我
我目前正在开发一个使用 JavaFX 播放视频的应用程序。我想将音量 slider 放置在边框 Pane 的右侧。目前,应用程序将调整大小以适应窗口的大小,该窗口将与我的音量 slider 重叠。 我
import cv2 image1 = cv2.imread('one.jpg', 0) image2 = cv2.imread('two.jpg', 0) diff = image1 - ima
假设我有以下两个字符串: var value = "1-000-111"; var mask = " - -"; 我想从值中减去掩码。换句话说,我想要这样的东西: var output = sub
全部, 我有以下长格式数据框: df = pd.DataFrame({'date': ["2020-01-01","2020-01-01","2020-01-02","2020-01-02","202
我是 scala 新手,正在尝试编写函数,该函数返回给定字符串中每个字母的所有索引的映射。我的代码: def group(string: String) = { val map = mutable
如何减去数组中每一行的向量? a <- array(1:8, dim=c(2,2,2)) a , , 1 [,1] [,2] [1,] 1 3 [2,] 2 4 ,
一个群扩展了幺半群的想法以允许逆。这允许: gremove :: (Group a) => a -> a -> a gremove x y = x `mappend` (invert y) 但是像自然
我有一个主表A,约有 900 万行。另一个表 B(相同结构)包含表 A 中的约 28K 行。从表 A 中删除 B 的所有内容的最佳方法是什么? 所有列(~10)的组合都是唯一的。没有更多的形式是唯一
我想为可减类型创建一个类型类,这样 值类型实现 Ord。 有一个减函数。 它支持 UTCTime、Double 和 Int(或可选的任何 Num 类型) 有一个 Delta 类型,它可能与源值类型不同
我有几个对象列表 List listA和List listB 。我需要减去listA和listB并获取listA和listB中不匹配的对象列表。如果两个列表具有相同的对象,我不应该得到任何值。我尝试使
首先,我对问题标题不明确表示歉意:原因是我无法识别工作中的数学过程。 简而言之,情况如下: 我有两个长度不同的向量:f1 和 f2。 我想按元素计算 f1 和 f2 之间的最小平方距离。 这是我的操作
我有两个元组列表,每个元组都由开始时间和结束时间(从纪元开始的秒数)组成,如下所示: list1= [(2,4), (7,10), (14,22)] list2 = [(1,3), (5,8), (9
void signalclear(int noise[], int star[], int clear[]) { int i = 0; int j = 0; while (clear[i] !
是否可以减一Region对象并将其从另一个对象中减去? 例如我有两个区域,region1(绿色)和 region2(红色): 我如何创建一个 region3,它只是 region1 的一部分而不是 r
我正在尝试使用 ListUtils.subtract(1,2) 从另一个列表中减去一个列表的值,但是我注意到减法从未发生,所以我一直在返回 1 中的所有元素。我认为这可能表明存在平等问题,但我的哈希码
我想对dataframe进行条件减法(如第一张图所示)。 基本上,这就是我想要做的: 减去我和你之间的食物和衣服的 col1 和 col2 的值,并为差异创建新的行。 因为第一行有'food'和'me
我使用 OpenCV 进行前景检测,但我想知道是否有人可以提供帮助。问题出在这两个参数上: 学习率在:bst.apply(currentFame, foregroungMask, learnRate)
我有一个脚本可以收集数据。我遇到了 TypeError: Timestamp subtraction must have the same timezones or no timezones 错误。我
我发布了 another question如果您需要一些上下文,请早点。看来我在这种方法上走错了路。 Addition chains可用于最小化对数字求幂所需的乘法次数。例如,a7 需要四次乘法。两个
我是一名优秀的程序员,十分优秀!