python 使用地标计算欧拉角的头部姿势

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 使用地标计算欧拉角的头部姿势相关的知识,希望对你有一定的参考价值。

retval, rvec, tvec = cv2.solvePnP(landmarks_3D,
                                          landmarks_2D,
                                          camera_matrix,
                                          camera_distortion)

if not calibrated_fg:
    bias_rvec = rvec
    bias_rvec_matrix = cv2.Rodrigues(bias_rvec)[0]
    calibrated_fg = True

raw_rvec_matrix = cv2.Rodrigues(rvec)[0]
rvec_matrix = np.dot(np.linalg.inv(bias_rvec_matrix),
                     raw_rvec_matrix)
head_pose = np.hstack((rvec_matrix, tvec))
R = np.vstack((head_pose, [0, 0, 0, 1]))

sy = math.sqrt(R[0, 0] * R[0, 0] + R[1, 0] * R[1, 0])
singular = sy < 1e-6

if not singular:
    x = math.atan2(R[2, 1], R[2, 2])
    y = math.atan2(-R[2, 0], sy)
    z = math.atan2(R[1, 0], R[0, 0])
else:
    x = math.atan2(-R[1, 2], R[1, 1])
    y = math.atan2(-R[2, 0], sy)
    z = 0

euler_angles = np.array([x, y, z]) / np.pi * 180

roll_predicted = euler_angles[0]
pitch_predicted = euler_angles[1]
yaw_predicted = euler_angles[2]

print("Frame Index: %d Landmark-based Estimated "
      "[roll, pitch, yaw] ..... [%f\t%f\t%f]\n" %
      (frame_num, roll_predicted, pitch_predicted, yaw_predicted))

txt_out.write(str(frame_num) + '\t%f\t%f\t%f\n' % (
    yaw_predicted, pitch_predicted, roll_predicted))

以上是关于python 使用地标计算欧拉角的头部姿势的主要内容,如果未能解决你的问题,请参考以下文章

在给定欧拉角的情况下,在 Blender Python 中获取定向光线上的 3D 点

如何在 Dlib C++ 中获取头部姿势估计的 3D 坐标轴

欧拉角与四元数转换——编程

欧拉角的详解

unity没有提供四元数到欧拉角的转换函数吗

我的OpenGL学习进阶之旅关于欧拉角旋转顺序旋转矩阵四元数等知识的整理