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]] |