引言
因为任意旋转矩阵仅有 3 个自由度,因此旋转向量是旋转矩阵的一个方便和最紧凑的表示。在全局 3D 几何优化中常用到旋转矩阵和旋转向量的相互转换,例如相机标定、PnP 问题的求解等。本文介绍基于 OpenCV-Python 的互转换实现方法。
方法
◆ Rodrigues()
void cv::Rodrigues(InputArray src,
OutputArray dst,
OutputArray jacobian = noArray()
)
Python:
cv.Rodrigues(src[, dst[, jacobian]]) -> dst, jacobian
参数详解:
-
src
:输入旋转向量(3x1 或 1x3)或旋转矩阵(3x3); -
dst
:输出旋转矩阵(3x3)或旋转向量(3x1 或 1x3); -
jacobian
:可选输出,雅可比矩阵,3x9 或 9x3,它是输出数组分量相对于输入数组分量的偏导数矩阵。
实验
通过 OpenCV 提供的 Rodrigues 函数即可实现旋转矩阵与旋转向量的相互转换。文章来源:https://www.toymoban.com/news/detail-517344.html
-
R_vec
:表示旋转向量; -
R_mat
:表示旋转矩阵。
旋转向量➡旋转矩阵
>>> import numpy as np
>>> import cv2 as cv
>>> R_vec = np.array([[0.1], [0.1], [0.1]])
>>> R_mat = cv.Rodrigues(R_vec)[0]
>>> R_mat
array([[ 0.99002498, -0.09451324, 0.10448826],
[ 0.10448826, 0.99002498, -0.09451324],
[-0.09451324, 0.10448826, 0.99002498]])
旋转矩阵➡旋转向量
>>> import numpy as np
>>> import cv2 as cv
>>> R_mat = np.array([
... [ 0.99002498, -0.09451324, 0.10448826],
... [ 0.10448826, 0.99002498, -0.09451324],
... [-0.09451324, 0.10448826, 0.99002498]])
>>> R_vec = cv.Rodrigues(R_mat)[0]
>>> R_vec
array([[0.1],
[0.1],
[0.1]])
参考
OpenCV: Camera Calibration and 3D Recongtruction文章来源地址https://www.toymoban.com/news/detail-517344.html
到了这里,关于【Python】旋转矩阵与旋转向量的相互转换(OpenCV)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!