4.2.1 仿射变换
    仿射变换(affine transformation)是空间直角坐标系的变换,从一个二维坐标变换到另一个二维坐标,如图4-5所示。仿射变换是一个线性变换,它保持了图像的“平行性”和“平直性”,即图像中原来的直线和平行线,变换后仍然保持原来的直线和平行线。仿射变换比较常用的变换有缩放、旋转、平移、剪切和翻转。
    图4-5 仿射变换示意图
    假设某点变换前的坐标为(x,y),变换后的坐标为(x',y'),那么仿射变换可以表示为:
    opencv支持仿射变换,读者可以通过warpaffine函数对图像进行指定的变化。
    warpaffine(src, m, dsize, flags, bordermode, bordervalue)
    其中主要参数的含义如下:
    ? src:输入变换前图像。
    ? m:仿射变换矩阵。
    ? dsize:设置输出图像大小。
    ? flags:设置插值方式,默认方式为线性插值。
    ? bordermode:边界像素模式。
    ? bordervalue:边界填充值,默认情况下为0,即填充黑色。
    直接填写仿射变换矩阵不是很直观,opencv还提供了getrotationmatrix2d函数用于生成变换矩阵,函数定义如下:
    getrotationmatrix2d(center, angle, scale)
    其中主要参数的含义如下:
    ? center:表示旋转的中心点。
    ? angle:表示旋转的角度。
    ? scale:表示图像缩放系数。
    下面我们结合实际例子介绍仿射变换。为了突显出图像变化前后的差别,我们会使用matplotlib进行子窗口绘图。在matplotlib中,使用subplot函数可以方便地设置窗口的个数、窗口的排列顺序等。
    如图4-6所示,我们希望水平排列三个子窗口,plt.subplot(131)表示一共一行窗口,一行排列三个窗口,在第一个窗口中绘图;plt.subplot(132)表示一共一行窗口,一行排列三个窗口,在第二个窗口中绘图。
    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    img=cv2.imread("../picture/pig.jpg")
    img1 = cv2.cvtcolor(img, cv2.color_bgr2rgb)
    rows,cols,_ = img.shape
    plt.subplot(131)
    plt.imshow(img1)
    plt.subplot(132)
    plt.imshow(img1)
    plt.subplot(133)
    plt.imshow(img1)
    图4-6 matplotlib使用举例
    同理,如果我们希望垂直排列三个子窗口,plt.subplot(311)表示一共一列窗口,一列排列三个窗口,在第一个窗口中绘图;plt.subplot(312)表示一共一列窗口,一列排列三个窗口,在第二个窗口中绘图。

章节目录

智能系统与技术丛书·AI安全之对抗样本入门所有内容均来自互联网,一曲书屋只为原作者兜哥的小说进行宣传。欢迎各位书友支持兜哥并收藏智能系统与技术丛书·AI安全之对抗样本入门最新章节