我正在嘗試將一些 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]
添加回答
舉報
0/150
提交
取消