opencv 旋转 point2f
时间: 2023-06-28 18:04:18 浏览: 202
opencv 旋转图像
3星 · 编辑精心推荐
要旋转一个 `Point2f`,可以使用 OpenCV 中的 `cv::Point2f` 类型和 `cv::Mat` 类型来实现。假设我们有一个点 `p` 和一个旋转角度 `angle`,我们可以按照以下步骤进行旋转:
1. 创建一个旋转矩阵 `R`,它是一个 2x2 的矩阵,表示绕原点旋转 `angle` 度的变换。可以使用 `cv::getRotationMatrix2D()` 函数来生成这个矩阵。
2. 将点 `p` 表示为一个 2x1 的列向量 `v`,其中第一行是 `p.x`,第二行是 `p.y`。
3. 将向量 `v` 和矩阵 `R` 相乘,得到一个新的向量 `u`,表示旋转后的点的坐标。
4. 将向量 `u` 转换为 `cv::Point2f` 类型,即可得到旋转后的点的坐标。
下面是一个示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main() {
cv::Point2f p(10, 20); // 要旋转的点
double angle = 45; // 旋转角度,单位为度
// 生成旋转矩阵
cv::Mat R = cv::getRotationMatrix2D(cv::Point2f(0, 0), angle, 1);
// 将点表示为一个列向量
cv::Mat v(2, 1, CV_64F);
v.at<double>(0, 0) = p.x;
v.at<double>(1, 0) = p.y;
// 将向量和矩阵相乘
cv::Mat u = R * v;
// 将结果转换为 Point2f 类型
cv::Point2f q(u.at<double>(0, 0), u.at<double>(1, 0));
std::cout << "旋转前的点:" << p << std::endl;
std::cout << "旋转后的点:" << q << std::endl;
return 0;
}
```
在上面的示例中,我们将点 `(10, 20)` 绕原点旋转了 `45` 度,得到了旋转后的点 `(4.14214, 22.9289)`。
阅读全文