图像的裁剪和旋转是图像处理中常见的操作。在 C++ 和 OpenCV 中,裁剪可以通过裁剪图像的 ROI (Region of Interest) 来实现,而旋转可以通过仿射变换来实现。

  1. 图像的裁剪

图像的裁剪可以通过设置 ROI 来实现。ROI 是一个矩形区域,可以通过 cv::Rect 类来定义。下面是一个简单的示例代码:

cv::Mat srcImage = cv::imread('test.jpg');
cv::Rect roiRect(100, 100, 200, 200); // 定义 ROI 的位置和大小
cv::Mat roiImage = srcImage(roiRect); // 获取 ROI 对应的图像
cv::imshow('ROI Image', roiImage);
cv::waitKey(0);

在这个示例中,我们首先读取了一张名为 'test.jpg' 的图像。然后,我们定义了一个矩形区域,其左上角坐标为 (100, 100),宽度和高度都为 200。最后,我们通过将 ROI 作为参数传递给原始图像的运算符 () 来获取 ROI 对应的图像。最终,我们将 ROI 图像显示出来。

  1. 图像的旋转

图像的旋转可以通过仿射变换来实现。仿射变换是一种线性变换,可以通过一个矩阵来表示。在 OpenCV 中,可以通过 cv::getRotationMatrix2D 函数来获取旋转变换矩阵。下面是一个简单的示例代码:

cv::Mat srcImage = cv::imread('test.jpg');
cv::Point2f center(srcImage.cols / 2, srcImage.rows / 2); // 图像中心点
double angle = 30; // 旋转角度
double scale = 1; // 缩放比例
cv::Mat rotMatrix = cv::getRotationMatrix2D(center, angle, scale); // 获取旋转变换矩阵
cv::Mat rotImage;
cv::warpAffine(srcImage, rotImage, rotMatrix, srcImage.size()); // 进行仿射变换
cv::imshow('Rotated Image', rotImage);
cv::waitKey(0);

在这个示例中,我们首先读取了一张名为 'test.jpg' 的图像。然后,我们定义了旋转中心点为图像中心点,旋转角度为 30 度,缩放比例为 1。接下来,我们通过 cv::getRotationMatrix2D 函数获取旋转变换矩阵。最后,我们通过 cv::warpAffine 函数进行仿射变换,并将结果显示出来。

总结:

图像的裁剪和旋转是图像处理中常见的操作。在 OpenCV 中,裁剪可以通过设置 ROI 来实现,旋转可以通过仿射变换来实现。对于裁剪,我们可以通过 cv::Rect 类来定义 ROI 的位置和大小,并将 ROI 作为参数传递给原始图像的运算符 () 来获取 ROI 对应的图像。对于旋转,我们可以通过 cv::getRotationMatrix2D 函数获取旋转变换矩阵,并通过 cv::warpAffine 函数进行仿射变换。

C++ OpenCV 图像裁剪和旋转详解及代码示例

原文地址: https://www.cveoy.top/t/topic/j8ns 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录