对于图像的旋转、平移和翻转是图像处理的常见方法,也是深度学习里图像增强的常见方式,可以在真实图像不足的场景下增加训练数据量。
import cv2
import numpy as np
img=cv2.imread('lena.jpg')
height, width,_=img.shape
matrix=cv2.getRotationMatrix2D((height/2,width/2),90,1)
img_new=cv2.warpAffine(img, matrix,(height, width))
Cv2. imshow("test",img_new)
上例中getRotationMatrix2D得到变换的矩阵,将这个矩阵作为仿射变换矩阵利用warpAffine来进行变换,第一个参数就是旋转中心,采用元组的形式,这里设置成图像中心,第二个参数90,代表旋转的角度为90度,第三个参数1,表示放缩的系数,1表示保持与原图大小相同(图3-6)。
图3-6 旋转变换后的图像
图像的平移同样可以利用warpAffine函数予以实现,但仿射变换矩阵的构造内容有所不同,可以通过NumPy定义了一个平移矩阵M,它将决定平移多少像素,格式如下:
matShift=np.float32([[1,0,25],[0,1,50]])
在平移矩阵第一行中设置的形式为[1,0,x],其中x表示图像将向左或向右移动的距离,如果x是正值,则表示向右移动,如果x是负值,则表示向左移动。在矩阵第二行设置的形式为[0,1,y],其中y表示图像将向上或向下移动的距离,如果y是正值,则表示向下移动,如果是负值的话,则表示向上移动(图3-7)。
实现平移的代码及效果如下:(www.xing528.com)
import cv2
import numpy as np
img=cv2.imread('lena.jpg')
height, width,_=img.shape
matShift=np.float32([[1,0,25],[0,1,50]])
img_new=cv2.warpAffine(img, matShift,(height, width))
cv2. imshow("shift",img_new)
cv2. waitKey(0)
图3-7 平移效果图像
翻转分为水平翻转和垂直翻转,采用的函数为cv2.flip(),示例如下:
cv2. flip(img, flipCode)
其中img代表原图像,flipMode代表翻转模式,有三种模式:0代表垂直方向翻转;1代表水平方向翻转;当设置为-1时表示水平、垂直方向同时翻转。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。