warpAffine

函数功能

warpAffine函数用于对图像进行仿射变换的函数。仿射变换是一种二维变换,可以包括旋转、缩放、平移和剪切。warpAffine函数根据提供的变换矩阵对图像进行操作,返回变换后的图像。

函数接口

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

参数

参数名

描述

取值范围

输入/输出

src

输入图像。

非空

输入

dst

输出图像。

Mat类型

输出

M

仿射变换矩阵。

size是2x3

输入

dsize

输出图像的尺寸。

size(-inf, inf)

输入

flags

插值方法。

INTER_NEAREST、INTER_LINEAR、INTER_CUBIC、INTER_LANCZOS4

输入

borderMode

边界模式,确定如何处理图像边界。

BORDER_CONSTANT、BORDER_REPLICATE、BORDER_REFLECT

输入

borderValue

用于填充边界的常数值。

(-inf, inf)

输入

返回值

错误码

错误码

描述

INVALID_PARAM_MSG

输入图像为空。

NOT_SUPPORT_MSG

输入图像类型错误或flags是不支持的类型。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // 创建一个5x5的简单图像
    cv::Mat src = (cv::Mat_<uint8_t>(5, 5) << 0, 0, 0, 0, 0,
                                              0, 1, 1, 1, 0,
                                              0, 1, 0, 1, 0,
                                              0, 1, 1, 1, 0,
                                              0, 0, 0, 0, 0);

    // 定义仿射变换矩阵
    cv::Mat M = (cv::Mat_<float>(2, 3) << 1, 0, 1,
                                          0, 1, 1);

    // 应用仿射变换
    cv::Mat dst;
    cv::warpAffine(src, dst, M, cv::Size(5, 5), cv::INTER_LINEAR, cv::BORDER_CONSTANT, cv::Scalar(0));

    // 输出图像
    std::cout << std::endl << dst << std::endl;

    return 0;
}

运行结果:

1
2
3
4
5
[[0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 1 1 1]
 [0 0 1 0 1]
 [0 0 1 1 1]]