/// 计算关于图像中心的旋转矩阵
Point center = Point( src.cols/2, src.rows/2 );
double angle = 35.0;
//旋转的同时也可以放缩
double scale = 0.8;
/// 根据以上参数得到旋转矩阵
rot_mat = getRotationMatrix2D( center, angle, scale );
cout<<"旋转矩阵为:\n"<<rot_mat;
//计算旋转后的画布大小,并将旋转中心平移到新的旋转中心
Rect bbox = RotatedRect(center, Size(src.cols*scale, src.rows*scale), angle).boundingRect();
rot_mat.at<double>(0, 2) += bbox.width / 2.0 - center.x;
rot_mat.at<double>(1, 2) += bbox.height / 2.0 - center.y;
/// 旋转图像
warpAffine( src, rotate_dst, rot_mat, bbox.size());
能够通过cv::RotatedRect::boundingRect()计算出来旋转之后的目标图像大小,然后计算目标图像中点和旋转中心的差,将其赋给旋转矩阵的平移向量。旋转后的图像如右图所示:
总感觉有些问题,然后去问学长,确实有问题,哈哈。
问题在于:我的center是原坐标系下的点,需要将它换为roi坐标系下的点,即将center减去roi左上角在原图上的坐标,然后在对roi进行旋转。
得到的效果如下图所示:
效果不错哦~