c++可以利用minAreaRect返回的Rotated里的旋转角度将图片进行旋转吗
时间: 2024-04-12 12:28:12 浏览: 68
image_rotote.rar_angle opencv_图像旋转opencv
是的,你可以使用`minAreaRect`函数返回的旋转角度来旋转图像。`minAreaRect`函数可以用于计算包围点集的最小旋转矩形,其中包括旋转角度信息。
以下是一个示例代码,展示了如何使用`minAreaRect`函数返回的旋转角度来旋转图像:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 读取图像
cv::Mat image = cv::imread("image.jpg");
// 定义点集
std::vector<cv::Point2f> points;
// 添加点到点集中,这里只是示例,你需要根据实际情况添加点
points.push_back(cv::Point2f(100, 100));
points.push_back(cv::Point2f(200, 100));
points.push_back(cv::Point2f(200, 200));
points.push_back(cv::Point2f(100, 200));
// 计算最小旋转矩形
cv::RotatedRect rotatedRect = cv::minAreaRect(points);
// 获取旋转角度
float angle = rotatedRect.angle;
// 创建旋转矩阵
cv::Mat rotationMatrix = cv::getRotationMatrix2D(rotatedRect.center, angle, 1.0);
// 应用旋转矩阵进行旋转
cv::Mat rotatedImage;
cv::warpAffine(image, rotatedImage, rotationMatrix, image.size());
// 显示结果
cv::imshow("Original Image", image);
cv::imshow("Rotated Image", rotatedImage);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
```
在上述代码中,我们首先使用`imread`函数读取图像。然后,我们定义一个点集`points`,并添加一些点到点集中(这里只是示例,你需要根据实际情况添加点)。
接下来,我们使用`minAreaRect`函数计算点集的最小旋转矩形,其中包括旋转角度信息。我们通过访问`RotatedRect`结构体的`angle`成员变量,获取旋转角度。
然后,我们使用`getRotationMatrix2D`函数创建一个旋转矩阵,该矩阵将围绕旋转中心和旋转角度进行旋转。
最后,我们使用`warpAffine`函数应用旋转矩阵,对原始图像进行旋转操作。这样,我们可以得到一个名为`rotatedImage`的图像,它是原始图像经过旋转后的结果。
最后,我们使用`imshow`函数显示原始图像和旋转后的图像,并使用`waitKey`和`destroyAllWindows`函数等待用户按下键盘并关闭窗口。
请注意,这里的点集是示例用途,你需要根据实际情况提供合适的点集来计算最小旋转矩形。同时,你也可以根据需要对旋转角度进行调整。
阅读全文