本文整理汇总了C++中Skeleton::initData方法的典型用法代码示例。如果您正苦于以下问题:C++ Skeleton::initData方法的具体用法?C++ Skeleton::initData怎么用?C++ Skeleton::initData使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Skeleton
的用法示例。
在下文中一共展示了Skeleton::initData方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: runKeyStep
//.........这里部分代码省略.........
//按照一定规则过滤 vecCurMotions,目前先过滤掉 inited为false的
int cntValid = filterMotions(vecCurMotions,0);
// 如果过滤完没有了, 就跳帧
if (cntValid < 1) {
delete ptrCurFeature;
vecEnableIdxs[idxImgCur] = 0;
}
else {
/** TODO: 对算出来的这么多有效的, 1是要判定closure; 2是要综合(取平均哈哈哈)运动状态 */
TIME_BEGIN("PoseEstimate");
// 对于计算出来的每对Motion, 应用该运动
std::vector<PoseState> vecEstiPoses;
for (int idx = 0; idx < vecCurMotions.size(); idx++) {
MotionState& curMotion = vecCurMotions[idx];
if (curMotion.getInited() == true) {
// 对vecPose的对应位姿,应用Motion得到 vecEstiPoses新位姿
vecEstiPoses.push_back(vecPoses[curMotion.getIdxImg(0)].move(curMotion));
//加入骨架
vecMotionLinks[curMotion.getIdxImg(1)].insert(std::make_pair(curMotion.getIdxImg(0), curMotion));
}
}
/** TODO: 新的多位姿选择方法 */
PoseState curPoseState = PoseState::calcAverage(vecEstiPoses);
curPoseState.errType.set(curError);
// 更新队列和关键帧
updateKeyList(ptrCurFeature);
cntRunOk++;
vecPoses[idxImgCur] = curPoseState;
TIME_END("PoseEstimate");
//if (CFG_bIsLogGlobal)
std::cout << vecPoses[idxImgCur] << std::endl;
// 画布画出当前位姿, 以及GroundTruth实际路径
// 内部修改 vecPoses 的数据,不能用 curPoseState 了
cDrawer.drawCanvas(vecPoses[idxImgCur]);
/*
* 本来用于测试 梯度下降优化方法,在计算完50个点之后执行
* 现废弃
*/
if (false && idxImgCur == 50) {
printf("开始调整\n");
Skeleton skl;
skl.initData(vecPoses, vecMotionLinks);
double err = skl.calcError();
double preErr = err;
printf("i=%d err=%f\n", -1, err);
if (CFG_bIsLogGlobal)
std::cout << skl.vecX[0] << std::endl;
if (CFG_bIsLogGlobal)
std::cout << skl.vecX[1] << std::endl;
for (int i = 0; i < 1000; i++) {
skl.calcDiff();
skl.merge(1e-3);
skl.fixMatrix();
err = skl.calcError();
printf("i=%d err=%f\n", i, err);
if (CFG_bIsLogGlobal)
std::cout << skl.vecX[0] << std::endl;
if (CFG_bIsLogGlobal)
std::cout << skl.vecX[1] << std::endl;
if (preErr< err) {
break;
}
preErr = err;
}
for (int i = idxImgBegin + 1; i < idxImgCur; i++) {
if ( skl.vecX[i].rows) {
PoseState t(i);
t.setInited( true );
t.pos.x = skl.vecX[i].at<double>(0, 0);
t.pos.y = skl.vecX[i].at<double>(1, 0);
t.pos.z = skl.vecX[i].at<double>(2, 0);
if (CFG_bIsLogGlobal)
std::cout << t.pos << std::endl;
}
}
cv::waitKey();
printf("结束调整\n");
}
}
TIME_END("MainLoop");
return ++idxImgCur;
}