我在轮换方面遇到麻烦。
我想做的是这样的:
我在第三步上有些卡住。
我设法用以下代码旋转图像:
cv::Mat M(2, 3, CV_32FC1);
cv::Point2f center((float)dst_img.rows / 2.0f, (float)dst_img.cols / 2.0f);
M = cv::getRotationMatrix2D(center, rotateAngle, 1.0);
cv::warpAffine(dst_img, rotated, M, cv::Size(rotated.cols, rotated.rows));
我尝试使用以下代码旋转点:
float xp = r.x * std::cos( PI * (-rotateAngle) / 180 ) - r.y * sin(PI * (rotateAngle) / 180);
float yp = r.x * sin(PI * (-rotateAngle) / 180) + r.y * cos(PI * (rotateAngle) / 180);
不能正常工作,但是要点在图像上不能很好地体现出来。有一个偏移量。
感谢您的帮助
最佳答案
如果M
是从cv::getRotationMatrix2D
获得的旋转矩阵,要使用此矩阵旋转cv::Point p
,可以执行以下操作:
cv::Point result;
result.x = M.at<double>(0,0)*p.x + M.at<double>(0,1)*p.y + M.at<double>(0,2);
result.y = M.at<double>(1,0)*p.x + M.at<double>(1,1)*p.y + M.at<double>(1,2);
如果要向后旋转点,请生成
M
的逆矩阵,或使用cv::getRotationMatrix2D(center, -rotateAngle, scale)
生成用于反向旋转的矩阵。关于c++ - 在OpenCV中从旋转的图像旋转回点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6864994/