opencv之warpAffine

1 函数功能

图像仿射变换,能够实现图像翻转、平移、旋转、缩放等功能。

2 参数解释

void cv::warpAffine( InputArray _src, OutputArray _dst,
                     InputArray _M0, Size dsize,
                     int flags, int borderType, const Scalar& borderValue )
_src: 输入图片
_dst: 输出图片,尺寸为dsize,类型与输入一致
_M0: 2×3的变换矩阵
dsize: 输出图片的尺寸
flags: 插值算法,当flag为WARP_INVERSE_MAP时,M为逆变换矩阵
borderType: Pixel extrapolation method
borderValue: Value used in case of a constant border

3 仿射变换矩阵M

opencv之warpAffine_第1张图片

M可以由以下两个函数得到:

(1)getAffineTransform

Mat getAffineTransform(InputArray src, InputArray dst)

该函数需要输入仿射变换前后的坐标,返回对应的变换矩阵,常用于人脸识别,将人脸固定在预设的位置,便于提取人脸特征。

(2)getRotationMatrix2D

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

该函数需要输入旋转中心坐标、旋转角度以及缩放比例,返回对应的变换矩阵。

4 代码示例

#include 
#include 
using namespace cv;
using namespace std;


int main()
{
    Mat src = imread("D:\\c++_opencv\\images\\0--Parade_0_Parade_marchingband_1_20.jpg", IMREAD_ANYCOLOR);
    Mat dst;

    double angle = 45;
    
    Size src_sz = src.size();
    Size dst_sz(src_sz.height, src_sz.width);
    int len = max(src.cols, src.rows);
    
    Point2f center(len / 2., len / 2.);
    
    Mat rot_mat = getRotationMatrix2D(center, angle, 1.0);
    
    warpAffine(src, dst, rot_mat, dst_sz);
    
    imshow("src", src);
    imshow("dst", dst);
    
    waitKey(0);
    destroyAllWindows();
    return 0;
}

你可能感兴趣的:(opencv,opencv,计算机视觉,人工智能,c++)