2.垂直镜像
垂直镜像变换代码,
1for i in range(h): 2 for j in range(w): 3 generate_img[h-1-i, j] = img[i, j]
镜像变换也可以直接调用opencv的flip进行使用。
3.图像缩放
这个比较简单,直接调用opencv的resize函数即可,
output = cv2.resize(img, (100, 300))
4.旋转变换
这个相对复杂一些,需要首先用getRotationMatrix2D函数获取一个旋转矩阵,然后调用opencv的warpAffine仿射函数安装旋转矩阵对图像进行旋转变换,
center = cv2.getRotationMatrix2D((w/2, h/2), 45, 1) rotated_img = cv2.warpAffine(img, center, (w, h))
5. 平移变换
首先用numpy生成一个平移矩阵,然后用仿射变换函数对图像进行平移变换,
move = np.float32([[1, 0, 100], [0, 1, 100]]) move_img = cv2.warpAffine(img, move, (w, h))
6.亮度变换
亮度变换的方法有很多种,本文介绍一种叠加图像的方式,通过给原图像叠加一副同样大小,不同透明度的全零像素图像来修改图像的亮度,
alpha = 1.5 light = cv2.addWeighted(img, alpha, np.zeros(img.shape).astype(np.uint8), 1-alpha, 3)
其中alpha是原图像的透明度,
7.添加噪声
首先写一下噪声添加的函数,原理就是给图像添加一些符合正态分布的随机数,
def add_noise(img): img = np.multiply(img, 1. / 255, dtype=np.float64) mean, var = 0, 0.01 noise = np.random.normal(mean, var ** 0.5, img.shape) img = convert(img, np.floating) out = img + noise return out
8.组合变换
除了以上方法单独使用之外,还可以叠加其中多种方法进行组合使用,比如可以结合选择、镜像进行使用,
完整代码如下:
1import cv2 2import numpy as np 3from skimage.util.dtype import convert 4 5 6class ImageAugmented(object): 7 def __init__(self, path="./data/000023.jpg"): 8 self.img = cv2.imread(path) 9 self.h, self.w = self.img.shape[0], self.img.shape[1] 10 11 # 1. 镜像变换 12 def flip(self, flag="h"): 13 generate_img = np.zeros(self.img.shape) 14 if flag == "h": 15 for i in range(self.h): 16 for j in range(self.w): 17 generate_img[i, self.h - 1 - j] = self.img[i, j] 18 else: 19 for i in range(self.h): 20 for j in range(self.w): 21 generate_img[self.h-1-i, j] = self.img[i, j] 22 return generate_img 23 24 # 2. 缩放 25 def _resize_img(self, shape=(100, 300)): 26 return cv2.resize(self.img, shape) 27 28 # 3. 旋转 29 def rotated(self): 30 center = cv2.getRotationMatrix2D((self.w / 2, self.h / 2), 45,1) 31 return cv2.warpAffine(self.img, center, (self.w, self.h)) 32 33 # 4. 平移 34 def translation(self, x_scale=100, y_scale=100): 35 move = np.float32([[1, 0, x_scale], [0, 1, y_scale]]) 36 return cv2.warpAffine(self.img, move, (self.w, self.h)) 37 38 # 5. 改变亮度 39 def change_light(self, alpha=1.5, scale=3): 40 return cv2.addWeighted(self.img, alpha, np.zeros(self.img.shape).astype(np.uint8), 1-alpha, scale) 41 42 # 6. 添加噪声 43 def add_noise(self, mean=0, var=0.01): 44 img = np.multiply(self.img, 1. / 255, dtype=np.float64) 45 noise = np.random.normal(mean, var ** 0.5, 46 img.shape) 47 img = convert(img, np.floating) 48 out = img + noise 49 return out
赶紧关注我们吧