C++ 如何平移旋转的OpenCV材质

C++ 如何平移旋转的OpenCV材质,c++,image,opencv,rotation,C++,Image,Opencv,Rotation,我正在编写一些代码,将OpenCV Mat旋转指定角度。使用下面的代码,我成功地围绕其中心旋转了垫子,但由于图像不是正方形,旋转图像的中心不是新图像的中心,并且部分图像位于新垫子之外 Point2f src_center(source.cols/2.0F, source.rows/2.0F); Mat rot_mat = getRotationMatrix2D(src_center, angle, 1.0); Mat final; final.create(calculateHeight(s

我正在编写一些代码,将OpenCV Mat旋转指定角度。使用下面的代码,我成功地围绕其中心旋转了垫子,但由于图像不是正方形,旋转图像的中心不是新图像的中心,并且部分图像位于新垫子之外

Point2f src_center(source.cols/2.0F, source.rows/2.0F);
Mat rot_mat = getRotationMatrix2D(src_center, angle, 1.0);

Mat final;

final.create(calculateHeight(source.cols, source.rows, angle), calculateWidth(source.cols, source.rows, angle), CV_32FC1);
warpAffine(source, final, rot_mat, final.size());
注意:calculateHeight和calculateWidth是根据原始垫子的尺寸和旋转角度确定新垫子尺寸的方法

示例:旋转到:


如何旋转垫子,使旋转后的垫子位于边界的中心?

只需将要旋转的图像复制到足够大的新图像的中心,然后旋转新图像。

如何使复制的图像位于新图像的中心?@rold2007这个问题是在该问题提出两年前提出的你链接了。上面的问题确实有我当时想要的,但它是重复的。是的,我以前注意到过,但不可能有其他的方法,因为你的问题没有一个公认的答案。我不知道这应该如何处理,所以我想版主会知道的,因此有了复制标志。