为了账号安全,请及时绑定邮箱和手机立即绑定

将Math函数从Python转换为C ++

将Math函数从Python转换为C ++

UYOU 2021-05-30 00:13:33
我正在尝试将一些 opencv 代码从 python 转换为 C++,但有点迷茫。蟒蛇是:if 0 < R[1,1] < 1:    # If it gets here, the pose is flipped.    # Flip the axes. E.g., Y axis becomes [-y0, -y1, y2].    R *= np.array([        [ 1, -1,  1],        [ 1, -1,  1],        [-1,  1, -1],    ])    # Fixup: rotate along the plane spanned by camera's forward (Z) axis and vector to marker's position    forward = np.array([0, 0, 1])    tnorm = T / np.linalg.norm(T)    axis = np.cross(tnorm, forward)    angle = -2*math.acos(tnorm @ forward)    R = cv2.Rodrigues(angle * axis)[0] @ R到目前为止,我有:cv::Mat R;if (0 < R.at<double>(1, 1) < 1) {            // Flip the axes.E.g., Y axis becomes[-y0, -y1, y2].            float mult[9] = { 1, -1, 1, 1, -1, 1,-1, 1, -1 };            cv::Mat FlipAxes = cv::Mat(3, 3, CV_32F, mult);            R *= FlipAxes;                //# Fixup: rotate along the plane spanned by camera's forward (Z) axis and vector to marker's position            cv::Vec3d forward(0, 0, 1);            double tnorm = tvecBest / np.linalg.norm(T)            axis = np.cross(tnorm, forward)            angle = -2 * math.acos(tnorm @ forward)            R = cv2.Rodrigues(angle * axis)[0] * R        }我迷失在这些行上:double tnorm = tvecBest / np.linalg.norm(T)axis = np.cross(tnorm, forward)angle = -2 * math.acos(tnorm @ forward)np.linalg.norm在 c++ opencv 中的等价物是什么?
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

np.linalg.norm(T) 只是 L2 范数:


sqrt(T[0]*T[0]+T[1]*T[1]+T[2]*T[2]) 

np.cross(tnorm,forward)是叉积:


axis[0] = tnorm[1]*forward[2]-tnorm[2]*forward[1]

axis[1] = -tnorm[0]*forward[2]+tnorm[2]*forward[0]

axis[2] = tnorm[0]*forward[1]-tnorm[1]*forward[0]


查看完整回答
反对 回复 2021-06-01
  • 1 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信