Python旋转矩阵与旋转向量的相互转换(OpenCV)
Posted Xavier Jiezou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python旋转矩阵与旋转向量的相互转换(OpenCV)相关的知识,希望对你有一定的参考价值。
引言
因为任意旋转矩阵仅有 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 函数即可实现旋转矩阵与旋转向量的相互转换。
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]])
参考
以上是关于Python旋转矩阵与旋转向量的相互转换(OpenCV)的主要内容,如果未能解决你的问题,请参考以下文章