实测过,题目结论应该是对的,但是保险起见,所以体问一下,验证一下结论。
一个三维空间点,严格按照绕x-y-z轴旋转的顺序,进行空间旋转,如果初始旋转角度为(10°,20°,30°),则旋转后,我如果想要让点再旋转回原位,需要的旋转角度并不是(-10°,-20°,-30°)。
将(10°,20°,30°)转化为Mat,计算逆矩阵,再转化为欧拉角,结果是(1.11605468°,-22.24218091°,-28.45177526°)。这个结果和结论应该没什么问题吧。
空间上有些难以想象,目前也没有三维软件做复现,所以如果能带点解释公式,或者给个解释的帖子就更好了。
以二维为例,图像原来是水平,然后旋转到了任意位置,再恢复原样水平,可以看出第一次旋转到任意位置角度是angle,后面恢复水平时不是 :https://blog.csdn.net/wd1603926823/article/details/103863438
既然在 OpenCV 中讨论,这是一个投影变换问题。
(1)OpenCV提供了cv.warpAffine函数实现仿射变换,可以实现平移、旋转、缩放、翻转、斜切变换及其组合变换。OpenCV中先由函数cv.getAffineTransform计算出仿射变换矩阵MA,再由函数cv.warpAffine根据MA计算得到仿射变换图像。
(2)图像的复合变换是指对给定的图像连续进行多次平移、旋转、翻转、缩放、错切等基本变换,也称为级联变换。对给定图像按一定顺序执行若干次基本变换,其变换矩阵仍然可以用 3x3 阶变换矩阵表示。进一步地,对图像依次执行基本变换 F1、F2、...Fn 的变换矩阵分别为 M1、M2、...Mn,可以证明,以图像中心点为中心进行比例、旋转进行变换,则复合变换的变换矩阵 M 等于各基本变换矩阵依次相乘所得到的组合矩阵。
(3)通过设置 flag=WARP_INVERSE_MAP,也可以求得投影变换的逆变换矩阵。