java opencv 平移_如何使用opencv pnpRansac()函数中的平移矩阵和旋转矩阵设置Rajawali相机的旋转?...

我正在开发Android AR应用程序 . 我正在使用RAJAWALI库进行AR渲染,使用openCV进行目标检测和跟踪 . 我正在使用opencv的PNPRansac函数计算旋转和平移矩阵 .

cv::Mat rotation=cv::Mat::zeros(3, 1, CV_64FC1);

cv::Mat translation=cv::Mat::zeros(3, 1, CV_64FC1);

TranslationMatrix=cv::Mat::zeros(3, 1, CV_64FC1);

RotationMatrix=cv::Mat::zeros(3, 3, CV_64FC1);

if (!cv::solvePnPRansac(objectPoints_float,

scenePoints_float,

cameraParams.cameraMatrix,

cameraParams.distortionMatrix,

rotation,

translation,

false,

iterationsCount,

cameraParams.reprojectionError,

confidence)) {

rotation.release();

translation.release();

return;

}

TranslationMatrix = translation;

cv::Rodrigues(rotation,

RotationMatrix); // converts Rotation Vector to Matrix

cv::Mat R_t, A;

R_t = cv::Mat::zeros(3, 3, CV_64FC1);

A = cv::Mat::zeros(3, 1, CV_64FC1);

A.at(0, 0) = 0;//[0]

A.at(1, 0) = 0;//[0]

A.at(2, 0) = 1;//[1]

//transpose of rotation matrix

R_t = RotationMatrix.t();

// Reference for this formula https://en.wikipedia.org/wiki/Camera_resectioning

cameraPosition = -1 * (R_t * TranslationMatrix);

//CameraOrientation = R_t * A;

//CameraOrientation = rot2euler(RotationMatrix).clone();

我正试图通过这个旋转和位置到Rajawali相机,以实现AR体验 . 该位置似乎是正确的,但未正确设置旋转 . 我在Rajawali场景的_543511中有这个:

// Get camera position and rotation from C++ to Java using native method

getCameraPositionRotation(cameraPosition.getNativeObjAddr(), cameraOrientation.getNativeObjAddr());

double POSx = cameraPosition.get(0, 0)[0] / 1000;

double POSy = cameraPosition.get(1, 0)[0] / 1000;

double POSz = cameraPosition.get(2, 0)[0] / 1000;

double ROTx = Math.toDegrees(cameraOrientation.get(0, 0)[0]);

double ROTy = Math.toDegrees(cameraOrientation.get(1, 0)[0]);

double ROTz = Math.toDegrees(cameraOrientation.get(2, 0)[0]);

getCurrentCamera().setPosition(POSx, POSy, POSz);

getCurrentCamera().setRotation(ROTx,ROTy,ROTz);

如何正确设置Rajawali相机的旋转?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值