基于OpenCV和光流的旋转和位置跟踪

基于OpenCV和光流的旋转和位置跟踪,opencv,opticalflow,Opencv,Opticalflow,我想使用光流跟踪OpenCV中对象的旋转和平移。到目前为止,我得到了类似的结果: 调用goodFeaturesToTrack以查找初始功能 调用calcOpticalFlowPyrLK以跟踪特征点的移动 调用findHomography查找图像A中的点如何移动到图像B 调用透视变换以基于单应性移动点 调用solvePnPRansac查找旋转矩阵和平移 载体 在这一点上,我试图采取不同的旋转和平移垫之间的图像,并将它们添加到一个初始的旋转和平移矩阵 cv::solvePnPRansac(patte

我想使用光流跟踪OpenCV中对象的旋转和平移。到目前为止,我得到了类似的结果:

  • 调用goodFeaturesToTrack以查找初始功能
  • 调用calcOpticalFlowPyrLK以跟踪特征点的移动
  • 调用findHomography查找图像A中的点如何移动到图像B
  • 调用透视变换以基于单应性移动点
  • 调用solvePnPRansac查找旋转矩阵和平移 载体
  • 在这一点上,我试图采取不同的旋转和平移垫之间的图像,并将它们添加到一个初始的旋转和平移矩阵

    cv::solvePnPRansac(pattern.points3d, _points2d, calibration.getIntrinsic(), calibration.getDistorsion(), raux, taux);
    raux.convertTo(Rvec, CV_32F);
    taux.convertTo(Tvec, CV_32F);
    
    cv::Mat_<float> rotMat(3, 3);
    cv::Rodrigues(Rvec, rotMat);
    cv::Mat_<float> transDiff   = _prevTranslation - Tvec;
    cv::Mat_<float> rotDiff     = _prevRotation    - rotMat;
    _absRotation                += rotDiff;
    _absTranslation             += transDiff;
    
    cv::solvePnPRansac(pattern.points3d,_points2d,calibration.getinfrance(),calibration.getDistorsion(),raux,taux);
    劳克斯·康弗托(Rvec,CV_32F);
    taux.convertTo(Tvec,CV_32F);
    cv::Mat_uoRotmat(3,3);
    cv::罗德里格斯(Rvec、rotMat);
    cv::Mat_uuTransdiff=u prevTranslation-Tvec;
    cv::Mat_uRotdiff=prevRotation-rotMat;
    _absRotation+=rotDiff;
    _Abstratranslation+=transDiff;
    
    这种方法的问题是平移向量不跟随图像。向量倾向于保持在范围内 [0.02 0.2-1.5]

    它离这个位置不远


    谢谢。

    整个视频都一样吗?如果不是,那么可能是因为帧之间没有太大差异。尝试在录制时降低帧速率,或在处理时跳过几帧。