OpenCV  4.10.0
开源计算机视觉库
加载中...
搜索中...
没有匹配项
公共类型 | 公共成员函数 | 静态公共成员函数 | 公共属性 | 所有成员列表
cv::Affine3< T > 类模板参考

仿射变换。 更多...

#include <opencv2/core/affine.hpp>

cv::Affine3< T > 的协作图

公共类型

typedef T float_type
 
typedef Matx< float_type, 3, 3 > Mat3
 
typedef Matx< float_type, 4, 4 > Mat4
 
typedef Vec< float_type, 3 > Vec3
 

公共成员函数

 Affine3 ()
 默认构造函数。它表示一个 4x4 单位矩阵。
 
 Affine3 (const float_type *vals)
 从 16 元素数组创建。
 
 Affine3 (const Mat &data, const Vec3 &t=Vec3::all(0))
 
 Affine3 (const Mat3 &R, const Vec3 &t=Vec3::all(0))
 
 Affine3 (const Mat4 &affine)
 扩展仿射矩阵。
 
 Affine3 (const Vec3 &rvec, const Vec3 &t=Vec3::all(0))
 
template<typename Y >
Affine3< Y > cast () const
 
Affine3 concatenate (const Affine3 &affine) const
 a.concatenate(affine) 等价于 affine * a;
 
Affine3 inv (int method=cv::DECOMP_SVD) const
 
Mat3 linear () const
 
void linear (const Mat3 &L)
 
template<typename Y >
 operator Affine3< Y > () const
 
Affine3 rotate (const Mat3 &R) const
 a.rotate(R) 等价于 Affine(R, 0) * a;
 
Affine3 rotate (const Vec3 &rvec) const
 a.rotate(rvec) 等价于 Affine(rvec, 0) * a;
 
Mat3 rotation () const
 
void rotation (const Mat &data)
 
void rotation (const Mat3 &R)
 
void rotation (const Vec3 &rvec)
 
Vec3 rvec () const
 
Affine3 translate (const Vec3 &t) const
 a.translate(t) 等价于 Affine(E, t) * a,其中 E 是单位矩阵
 
Vec3 translation () const
 
void translation (const Vec3 &t)
 

静态公共成员函数

static Affine3 Identity ()
 创建一个 4x4 单位变换。
 

公共属性

Mat4 matrix
 

详细描述

template<typename T>
class cv::Affine3< T >

仿射变换。

它表示一个 4x4 齐次变换矩阵 \(T\)

\[T = \begin{bmatrix} R & t\\ 0 & 1\\ \end{bmatrix} \]

其中 \(R\) 是一个 3x3 旋转矩阵,\(t\) 是一个 3x1 平移向量。

你可以通过一个 3x3 旋转矩阵或一个 3x1 旋转向量来指定 \(R\),它通过 Rodrigues 公式转换为一个 3x3 旋转矩阵。

要构造一个表示先绕轴 \(r\) 旋转角度为 \(|r|\) 弧度(右手定则),然后平移向量 \(t\) 的矩阵 \(T\),你可以使用

如果你已经有了旋转矩阵 \(R\),那么你可以使用

要从 \(T\) 中提取旋转矩阵 \(R\),请使用

cv::Matx33f R = T.rotation();

要从 \(T\) 中提取平移向量 \(t\),请使用

cv::Vec3f t = T.translation();

要从 \(T\) 中提取旋转向量 \(r\),请使用

cv::Vec3f r = T.rvec();

请注意,由于从旋转向量到旋转矩阵的映射是多对一的。返回的旋转向量不一定是您之前用来设置矩阵的旋转向量。

如果你有两个变换 \(T = T_1 * T_2\),请使用

cv::Affine3f T, T1, T2;
T = T2.concatenate(T1);
Affine3 concatenate(const Affine3 &affine) const
a.concatenate(affine) 等价于 affine * a;

要获取 \(T\) 的逆变换,请使用

cv::Affine3f T, T_inv;
T_inv = T.inv();
Affine3 inv(int method=cv::DECOMP_SVD) const

成员类型定义文档

◆ float_type

template<typename T >
typedef T cv::Affine3< T >::float_type

◆ Mat3

template<typename T >
typedef Matx<float_type, 3, 3> cv::Affine3< T >::Mat3

◆ Mat4

template<typename T >
typedef Matx<float_type, 4, 4> cv::Affine3< T >::Mat4

◆ Vec3

template<typename T >
typedef Vec<float_type, 3> cv::Affine3< T >::Vec3

构造函数和析构函数文档

◆ Affine3() [1/6]

template<typename T >
cv::Affine3< T >::Affine3 ( )

默认构造函数。它表示一个 4x4 单位矩阵。

◆ Affine3() [2/6]

template<typename T >
cv::Affine3< T >::Affine3 ( const Mat4 affine)

扩展仿射矩阵。

◆ Affine3() [3/6]

template<typename T >
cv::Affine3< T >::Affine3 ( const Mat3 R,
const Vec3 t = Vec3::all(0) 
)

得到的 4x4 矩阵是

\[ \begin{bmatrix} R & t\\ 0 & 1\\ \end{bmatrix} \]

参数
R3x3 旋转矩阵。
t3x1 平移向量。

◆ Affine3() [4/6]

template<typename T >
cv::Affine3< T >::Affine3 ( const Vec3 rvec,
const Vec3 t = Vec3::all(0) 
)

Rodrigues 向量。

当前矩阵的最后一行设置为 [0,0,0,1]。

参数
rvec3x1 旋转向量。它的方向表示旋转轴,它的长度表示旋转角度(以弧度为单位)(使用右手定则)。
t3x1 平移向量。

◆ Affine3() [5/6]

template<typename T >
cv::Affine3< T >::Affine3 ( const Mat data,
const Vec3 t = Vec3::all(0) 
)
explicit

结合了上述所有构造函数。支持 data 矩阵的 4x4、3x4、3x3、1x3、3x1 大小。

当 data 不是 4x4 时,当前矩阵的最后一行设置为 [0,0,0,1]。

参数
data1 通道矩阵。当它是 4x4 时,它被复制到当前矩阵,并且不使用 t。当它是 3x4 时,它被复制到当前矩阵的左上角 3x4 部分,并且不使用 t。当它是 3x3 时,它被复制到当前矩阵的左上角 3x3 部分。当它是 3x1 或 1x3 时,它被视为旋转向量,并且使用 Rodrigues 公式计算一个 3x3 旋转矩阵。
t3x1 平移向量。它仅在 data 不是 4x4 或 3x4 时使用。

◆ Affine3() [6/6]

template<typename T >
cv::Affine3< T >::Affine3 ( const float_type vals)
explicit

从 16 元素数组创建。

成员函数文档

◆ cast()

template<typename T >
template<typename Y >
Affine3< Y > cv::Affine3< T >::cast ( ) const

◆ concatenate()

template<typename T >
Affine3 cv::Affine3< T >::concatenate ( const Affine3< T > &  affine) const

a.concatenate(affine) 等价于 affine * a;

◆ Identity()

template<typename T >
static Affine3 cv::Affine3< T >::Identity ( )
static

创建一个 4x4 单位变换。

◆ inv()

template<typename T >
Affine3 cv::Affine3< T >::inv ( int  method = cv::DECOMP_SVD) const
返回值
当前矩阵的逆矩阵。

◆ linear() [1/2]

template<typename T >
Mat3 cv::Affine3< T >::linear ( ) const
返回值
左上角 3x3 部分

◆ linear() [2/2]

template<typename T >
void cv::Affine3< T >::linear ( const Mat3 L)

将 3x3 矩阵 L 复制到当前矩阵的左上角部分

它设置了矩阵的左上角 3x3 部分。其余部分不受影响。

参数
L3x3 矩阵。

◆ operator Affine3< Y >()

template<typename T >
template<typename Y >
cv::Affine3< T >::operator Affine3< Y > ( ) const

◆ rotate() [1/2]

template<typename T >
Affine3 cv::Affine3< T >::rotate ( const Mat3 R) const

a.rotate(R) 等价于 Affine(R, 0) * a;

◆ rotate() [2/2]

template<typename T >
Affine3 cv::Affine3< T >::rotate ( const Vec3 rvec) const

a.rotate(rvec) 等价于 Affine(rvec, 0) * a;

◆ rotation() [1/4]

template<typename T >
Mat3 cv::Affine3< T >::rotation ( ) const
返回值
左上角 3x3 部分

◆ rotation() [2/4]

template<typename T >
void cv::Affine3< T >::rotation ( const Mat data)

组合上面的旋转方法。支持 3x3、1x3、3x1 大小的数据矩阵。

它设置了矩阵的左上角 3x3 部分。其余部分不受影响。

参数
data单通道矩阵。当它是 3x3 矩阵时,它设置当前矩阵的左上角 3x3 部分。当它是 1x3 或 3x1 矩阵时,它被用作旋转向量。Rodrigues 公式用于计算旋转矩阵,并设置当前矩阵的左上角 3x3 部分。

◆ rotation() [3/4]

template<typename T >
void cv::Affine3< T >::rotation ( const Mat3 R)

旋转矩阵。

将旋转矩阵复制到当前矩阵的左上角 3x3 部分。当前矩阵的其余元素不会改变。

参数
R3x3 旋转矩阵。

◆ rotation() [4/4]

template<typename T >
void cv::Affine3< T >::rotation ( const Vec3 rvec)

Rodrigues 向量。

它设置了矩阵的左上角 3x3 部分。其余部分不受影响。

参数
rvec3x1 旋转向量。方向表示旋转轴,长度表示以弧度表示的旋转角度(使用右手拇指规则)。

◆ rvec()

template<typename T >
Vec3 cv::Affine3< T >::rvec ( ) const

Rodrigues 向量。

返回值
表示当前矩阵的左上角 3x3 旋转矩阵的向量。
警告
由于旋转向量和旋转矩阵之间的映射是多对一的,因此此函数仅返回一个表示当前旋转矩阵的旋转向量,它不一定与 rotation(const Vec3& rvec) 设置的相同。

◆ translate()

template<typename T >
Affine3 cv::Affine3< T >::translate ( const Vec3 t) const

a.translate(t) 等价于 Affine(E, t) * a,其中 E 是单位矩阵

◆ translation() [1/2]

template<typename T >
Vec3 cv::Affine3< T >::translation ( ) const
返回值
右上角 3x1 部分

◆ translation() [2/2]

template<typename T >
void cv::Affine3< T >::translation ( const Vec3 t)

将 t 复制到当前矩阵最后一列的前三个元素

它设置了矩阵的右上角 3x1 部分。其余部分不受影响。

参数
t3x1 平移向量。

成员数据文档

◆ matrix

template<typename T >
Mat4 cv::Affine3< T >::matrix

此类的文档是从以下文件生成的