opencv中可以通过以下的函数获取旋转矩阵并进行图像旋转,但是这种方法通常会出现图像的四个角会被裁剪的问题。
Mat M = getRotationMatrix2D(center, angle, 1);//计算旋转的仿射变换矩阵
warpAffine(srcImage, destImage, M, Size(srcImage.cols, srcImage.rows));
本文提供一种可以避免裁剪问题的旋转方法,并且可以通过旋转后的图像还原到原图,看代码:
//Region 原始图片 //RotationRegion 旋转后的图片 cv::Point2f center;//旋转中心 float radiansAngle = 60;//旋转角度 double dx = 0; double dy = 0; imageRotation(Region, RotationRegion, center, radiansAngle, dx, dy); //反向映射到旋转之前的图Region memset(Region.data, 0, Region.rows*Region.cols); int height = RotationRegion.rows; int width = RotationRegion.cols; const double cosAngle = cos(radiansAngle); const double sinAngle = sin(radiansAngle); for (int i = 0; i < height; i++) // y { for (int j = 0; j < width; j++) // x { //坐标变换 int x = float(j)*cosAngle + floa