矩阵旋转 Eigen 库

3

如何将存储在Eigen矩阵中的2d图像顺时针旋转90度?

我的代码:

Eigen::Matrix<int, n, n> m;
Eigen::Rotation2D rot(90);
auto m1 = m * rot.derived();

但是我收到了一个错误:

error: static_assert failed due to requirement 'ProductIsValid || SameSizes' "INVALID_MATRIX_PRODUCT"

2
Eigen::Rotation2D 不会旋转矩阵,它是用来让二维空间中的点绕坐标原点 (0, 0) 旋转的。Eigen::Rotation2D 是一个 2x2 的矩阵,例如 (0 1; -1 0) * (2 1) = (1 -2) 就是一个旋转操作。 - user15388024
1
请参见http://eigen.tuxfamily.org/dox/AsciiQuickReference.txt R.transpose().colwise().reverse() - chtz
@jabaa,从技术上讲,“Rotation2D”只在乘法时表现得像一个2x2矩阵。它被存储为单个标量(带有弧度角)。 - chtz
@chtz 是的,"Eigen::Rotation2D是一个2x2矩阵,..." 应该改为 "Eigen::Rotation2D的行为类似于2x2矩阵,..."。我想简化了它,过于简单化了 :-) - user15388024
1
这个回答解决了你的问题吗?将NxN矩阵逆时针旋转90度 - chtz
1个回答

1
旋转逆时针
Eigen::Matrix<int, n, n> m_rotated_ninty_ccwise = m.transpose().colwise().reverse();

顺时针旋转

Eigen::Matrix<int, n, n> m_rotated_ninty_cwise = m.reverse().transpose().reverse();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接