OpenCV实现图像旋转:
double angle = -atan( static_cast<double>(alignPoint[0].y - alignPoint[1].y)
/ (alignPoint[1].x - alignPoint[0].x) );//坐标系调整(X方向变成-X方向)
angle = angle * 180 / CV_PI;
float m[6];
cv::Mat M(2,3,CV_32F,m);
cv::Point center(static_cast<int>(image.cols/2),static_cast<int>(image.rows/2));
M = cv::getRotationMatrix2D(center,angle,1);
cv::Mat dstImage(image.size(),image.type());
cv::warpAffine(image,dstImage,M,image.size());
需要注意的几点:
1、关于double atan(double K)函数
这个函数的参数是直线的斜率,返回值是角度,其单位为弧度。
2、关于图像坐标与笛卡尔坐标
图像坐标的X轴对应笛卡尔坐标-X轴,因此在求直线的斜率的时候,应该对X轴方向的差值取反。
3、关于OpenCV函数
Mat getRotationMatrix2D(Point2fcenter, double angle, double scale)
void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int
flags=INTER_LINEAR, intborderMode=BORDER_CONSTANT, const Scalar&
borderValue=Scalar())