C++ OpenCV 图像裁剪和旋转:完整代码及原理详解
以下是 C++ 和 OpenCV 实现图像裁剪和旋转的完整代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取原始图像
Mat src = imread('lena.jpg');
if (src.empty())
{
cout << 'Could not open or find the image!' << endl;
return -1;
}
// 显示原始图像
imshow('Original Image', src);
// 裁剪图像
Rect roi(100, 100, 200, 200); // 定义裁剪区域
Mat cropped = src(roi); // 裁剪图像
imshow('Cropped Image', cropped);
// 旋转图像
Point2f center(src.cols / 2.0, src.rows / 2.0); // 计算图像中心点
Mat M = getRotationMatrix2D(center, 45, 1.0); // 定义旋转矩阵
Mat rotated; // 定义旋转后的图像
warpAffine(src, rotated, M, src.size()); // 旋转图像
imshow('Rotated Image', rotated);
waitKey(0);
return 0;
}
原理详解:
- 图像裁剪
在 OpenCV 中,可以通过定义一个矩形区域来裁剪图像。具体步骤如下:
1.1 定义一个矩形区域,包括左上角的坐标和矩形的宽度和高度,例如:
Rect roi(100, 100, 200, 200);
1.2 使用矩形区域来裁剪图像,例如:
Mat cropped = src(roi);
其中,src 为原始图像,cropped 为裁剪后的图像。
- 图像旋转
在 OpenCV 中,可以使用 getRotationMatrix2D 函数来定义旋转矩阵,然后使用 warpAffine 函数来旋转图像。具体步骤如下:
2.1 计算图像中心点,例如:
Point2f center(src.cols / 2.0, src.rows / 2.0);
其中,src.cols 和 src.rows 分别表示图像的宽度和高度。
2.2 定义旋转矩阵,例如:
Mat M = getRotationMatrix2D(center, 45, 1.0);
其中,第一个参数为旋转中心点,第二个参数为旋转角度,第三个参数为缩放比例。
2.3 使用 warpAffine 函数来旋转图像,例如:
Mat rotated;
warpAffine(src, rotated, M, src.size());
其中,src 为原始图像,rotated 为旋转后的图像,M 为旋转矩阵,src.size() 表示输出图像的大小。
原文地址: https://www.cveoy.top/t/topic/j8nO 著作权归作者所有。请勿转载和采集!