2

我想使用光流跟踪 OpenCV 中对象的旋转和平移。到目前为止,我有这样的事情:

  1. 调用 goodFeaturesToTrack 查找初始特征
  2. 调用 calcOpticalFlowPyrLK 跟踪特征点的移动
  3. 调用 findHomography 查找图像 A 中的点如何移动到图像 B
  4. 调用 perspectiveTransform 根据单应性移动点
  5. 调用solvePnPRansac求旋转矩阵和平移向量

在这一点上,我试图获取图像之间的旋转和平移 Mat 之间的差异,并将它们添加到初始旋转和平移矩阵中。

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;

这种方法的问题是平移向量不跟随图像。向量倾向于保持在 [0.02 0.2 -1.5] 范围内

它离这个位置不远。

谢谢。

4

0 回答 0