利用OpenCV的warpAffine函数对一个图片进行旋转的话,如果图像大小和原图像一样的话。就会将超出的范围截断。所以要对旋转的矩阵做平移,计算旋转后的新图像大小。
#include <iostream>
using namespace std;
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat src, dst;
src = imread("lena.jpg");
double angle;
angle = -34.5;//度
//---------------旋转函数--------------------------
int heightNew = int(src.cols * fabs(sin(angle * CV_PI / 180.0)) + src.rows * fabs(cos(angle * CV_PI / 180.0)));
int widthNew = int(src.cols * fabs(cos(angle * CV_PI / 180.0)) + src.rows * fabs(sin(angle * CV_PI / 180.0)));
Point2f pt(src.cols / 2.0, src.rows / 2.0);//以图片的中心为旋转点
Mat r = getRotationMatrix2D(pt, angle, 1.0);
r.at<double>(0, 2) += (widthNew - src.cols) / 2;
r.at<double>(1, 2) += (heightNew - src.rows) / 2;
warpAffine(src, dst, r, Size(widthNew, heightNew), INTER_LINEAR);
//-----------------------------------------
imshow("src", src);
imshow("dst", dst);
imwrite("dst.jpg", dst);
waitKey(0);
return 0;
}


3597

被折叠的 条评论
为什么被折叠?



