【发布时间】:2011-10-15 10:51:17
【问题描述】:
我遇到了轮换问题。 我想做的是这样的:
- 旋转图像
- 检测旋转图像上的特征(点)
- 向后旋转点,这样我就可以得到与初始图像相对应的点坐标
我在第三步有点卡住了。
我设法使用以下代码旋转了图像:
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);
工作不正常,但图像上的点不能很好地恢复。有一个偏移量。
感谢您的帮助
【问题讨论】:
-
为什么不尝试使用 -rotate angle、getRotationMatrix() 和 warp affine 来旋转矩阵...
-
为什么不对旋转矩阵使用逆矩阵呢?三角函数对我来说听起来很脆弱。
-
是的,但是如何找回旋转矩阵中的点?
标签: c++ opencv matrix rotation