[C++] opencv - 如何通过warpAffine函数和getRotationMatrix2D函数进行图像旋转?

27 篇文章 1 订阅

warpAffine函数介绍

warpAffine函数是OpenCV中的一个函数,用于对图像进行仿射变换,包括旋转、缩放、平移等操作。该函数可以对图像进行二维或三维的仿射变换,支持多种插值方法和输出图像格式。

warpAffine是OpenCV中的一个函数,用于对图像进行仿射变换,包括旋转、缩放、平移等操作。该函数可以对图像进行二维或三维的仿射变换,支持多种插值方法和输出图像格式。

函数原型如下:

void warpAffine(InputArray src, OutputArray dst, InputArray M, int flags = INTER_LINEAR, int borderMode = BORDER_CONSTANT, const Scalar& borderValue = Scalar());

其中,参数含义如下:

  • src:输入图像,类型为cv::InputArray,可以是单通道或多通道的灰度图或彩色图。
  • dst:输出图像,类型为cv::OutputArray,表示变换后的图像。
  • M:变换矩阵,类型为cv::InputArray,是一个3x3的浮点型矩阵,表示二维仿射变换的变换参数。
  • flags:插值方法标志,类型为int,默认值为INTER_LINEAR,表示使用线性插值方法。其他可选值包括INTER_NEARESTINTER_AREAINTER_CUBIC等。
  • borderMode:边界处理方式,类型为int,默认值为BORDER_CONSTANT,表示使用常量像素填充边界。其他可选值包括BORDER_REPLICATEBORDER_REFLECTBORDER_WRAP等。
  • borderValue:边界像素值,类型为Scalar,默认值为0。当边界处理方式为BORDER_CONSTANT时,该参数指定了边界像素的值。

getRotationMatrix2D函数介绍

getRotationMatrix2D是OpenCV中的一个函数,用于获取二维旋转矩阵。该函数可以对图像进行仿射变换,包括旋转、缩放、平移等操作。

函数原型如下:

Mat getRotationMatrix2D(Point2f center, double angle, double scale);

其中,参数含义如下:

  • center:旋转中心点坐标,类型为cv::Point2f,表示二维平面上的点。
  • angle:旋转角度,单位为弧度,类型为double。正值表示逆时针旋转,负值表示顺时针旋转。
  • scale:缩放比例,类型为double
  • 返回值为旋转矩阵,类型为cv::Mat,是一个3x3的浮点型矩阵。

如何OpenCV使用图像旋转

我们可以使用warpAffine函数和getRotationMatrix2D函数进行图像旋转

以下是一个示例代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    // 读取输入图像
    Mat src = imread("simple_chart.png", IMREAD_COLOR);
    if (src.empty())
    {
        cout << "Failed to load image" << endl;
        return -1;
    }
     // 将原始图像显示出来
    imshow("Origin Image", src);
    waitKey(0);

    // 定义输出图像的大小和类型
    int dst_width = src.cols * 1;
    int dst_height = src.rows * 1;
    Mat dst(dst_height, dst_width, src.type());

    // 定义旋转中心点和旋转角度
    Point2f center(src.cols / 2.0, src.rows / 2.0);
    double angle = 45.0; // 逆时针旋转角度为45度

    // 定义旋转矩阵
    Mat rot_mat = getRotationMatrix2D(center, angle, 1.0);

    // 对输入图像进行仿射变换,并将结果存储到输出图像中
    warpAffine(src, dst, rot_mat, Size(dst.cols, dst.rows));

    // 将输出图像显示出来
    imshow("Output Image", dst);

    // 等待按键并关闭窗口
    waitKey(0);
    return 0;
}

代码解释 

这段代码首先读取输入图像,然后定义输出图像的大小和类型。接着,定义旋转中心点和旋转角度,并使用getRotationMatrix2D函数创建一个旋转矩阵。最后,调用warpAffine函数对输入图像进行仿射变换,并将结果存储到输出图像中。最终,将输出图像显示出来。

运行结果

原始图如下:

旋转之后:

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老狼IT工作室

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值