以下是 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;
}

原理详解:

  1. 图像裁剪

在 OpenCV 中,可以通过定义一个矩形区域来裁剪图像。具体步骤如下:

1.1 定义一个矩形区域,包括左上角的坐标和矩形的宽度和高度,例如:

Rect roi(100, 100, 200, 200);

1.2 使用矩形区域来裁剪图像,例如:

Mat cropped = src(roi);

其中,src 为原始图像,cropped 为裁剪后的图像。

  1. 图像旋转

在 OpenCV 中,可以使用 getRotationMatrix2D 函数来定义旋转矩阵,然后使用 warpAffine 函数来旋转图像。具体步骤如下:

2.1 计算图像中心点,例如:

Point2f center(src.cols / 2.0, src.rows / 2.0);

其中,src.colssrc.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() 表示输出图像的大小。

C++ OpenCV 图像裁剪和旋转:完整代码及原理详解

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

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