python - 如何使用 Python 在不使用 OpenCV 的情况下将罗德里格斯向量转换为旋转矩阵

标签 python opencv

我正在寻找相当于

的代码片段
import cv2

def rodrigues_vec_to_rotation_mat(rodrigues_vec): 
     return cv2.Rodrigues(rodrigues_vec)[0] 

无需导入/使用 OpenCV 库。

最佳答案

import math
import sys
import numpy as np

def rodrigues_vec_to_rotation_mat(rodrigues_vec):
    theta = np.linalg.norm(rodrigues_vec)
    if theta < sys.float_info.epsilon:              
        rotation_mat = np.eye(3, dtype=float)
    else:
        r = rodrigues_vec / theta
        I = np.eye(3, dtype=float)
        r_rT = np.array([
            [r[0]*r[0], r[0]*r[1], r[0]*r[2]],
            [r[1]*r[0], r[1]*r[1], r[1]*r[2]],
            [r[2]*r[0], r[2]*r[1], r[2]*r[2]]
        ])
        r_cross = np.array([
            [0, -r[2], r[1]],
            [r[2], 0, -r[0]],
            [-r[1], r[0], 0]
        ])
        rotation_mat = math.cos(theta) * I + (1 - math.cos(theta)) * r_rT + math.sin(theta) * r_cross
    return rotation_mat 

来源:
documentation Rodrigues() 函数的。
source code cvRodrigues2() 函数。

关于python - 如何使用 Python 在不使用 OpenCV 的情况下将罗德里格斯向量转换为旋转矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62345076/

相关文章:

python - 程序运行后字典清空

python - 获取 127.0.1.1 而不是 192.168.1.* ip ubuntu python

c++ - 使用 Opencv 直接从网络摄像头获取灰度图像

opencv - 在 OpenCV 2.3.0 中计算阈值 IplImage 中 "White Blobs"数量的最佳方法

python - 将函数与 numpy 数组的每个元素集成为集成限制

python - 比较嵌套列表 Python

c++ - 如何用 gtk 2.x 而不是 gtk3.x 编译 opencv

c# - 修改EmguCV以使用P/Invoke添加缺少的功能

python - numpy:与非零相反(获取零元素的索引)

python - OpenCV-CUDA Win10。导入时未找到 Python 模块