c++, open cv,图像旋转任意度数,给出完整的代码和注释
时间: 2024-09-25 09:19:33 浏览: 107
在C++中,OpenCV库是一个强大的计算机视觉库,可以方便地处理图像和视频操作。如果你需要对图像进行旋转到任意角度,你可以利用OpenCV中的`getRotationMatrix2D()`函数生成旋转矩阵,然后结合`warpAffine()`函数实现旋转。以下是使用OpenCV进行图像旋转的完整示例代码:
```cpp
#include <opencv2/opencv.hpp> // 引入OpenCV头文件
#include <iostream>
cv::Mat rotateImage(const cv::Mat& src, double angle, int centerPt = {}, bool scale = true)
{
// 检查输入是否为空
if (src.empty())
throw std::runtime_error("Input image is empty");
// 获取图像宽度、高度
int rows = src.rows;
int cols = src.cols;
// 如果未提供中心点,则默认为中心点在原点
if (centerPt == {})
{
centerPt.x = cols / 2; // 行方向
centerPt.y = rows / 2; // 列方向
}
// 计算旋转矩阵
cv::Point2f center(centerPt);
double rad = angle * CV_PI / 180.0; // 将角度转换为弧度
cv::Mat rotMat = cv::getRotationMatrix2D(center, rad, scale);
// 创建一个新的与源图像大小相同的空矩阵
cv::Mat rotatedImage(rows, cols, src.type());
// 使用仿射变换将源图像旋转并复制到新矩阵
cv::warpAffine(src, rotatedImage, rotMat, rotatedImage.size(), cv::INTER_LINEAR + cv::WARP_INVERSE_MAP); // INTER_LINEAR用于插值
return rotatedImage;
}
int main()
{
try
{
// 加载图像
cv::Mat inputImage = cv::imread("path_to_your_image.jpg", cv::IMREAD_COLOR); // 替换为实际图片路径
// 设置旋转角度
double rotationAngle = 45.0; // 例如45度
// 进行旋转
cv::Mat rotatedImage = rotateImage(inputImage, rotationAngle);
// 显示原图和旋转后的图像
std::cout << "Original Image:\n";
cv::imshow("Original", inputImage);
std::cout << "Rotated Image (" << rotationAngle << " degrees):\n";
cv::imshow("Rotated", rotatedImage);
// 等待用户按键,然后关闭所有窗口
cv::waitKey(0);
cv::destroyAllWindows();
}
catch (const std::exception& e)
{
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
阅读全文