python数据增强代码
以下是一个简单的Python数据增强代码示例,使用了OpenCV库和NumPy库:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 随机裁剪
h, w = img.shape[:2]
crop_size = min(h, w)
start_h = np.random.randint(0, h - crop_size + 1)
start_w = np.random.randint(0, w - crop_size + 1)
img = img[start_h:start_h+crop_size, start_w:start_w+crop_size]
# 随机翻转
if np.random.rand() < 0.5:
img = cv2.flip(img, 0) # 垂直翻转
if np.random.rand() < 0.5:
img = cv2.flip(img, 1) # 水平翻转
# 随机旋转
angle = np.random.randint(-10, 10)
M = cv2.getRotationMatrix2D((crop_size/2, crop_size/2), angle, 1)
img = cv2.warpAffine(img, M, (crop_size, crop_size))
# 随机亮度调整
brightness = np.random.randint(-50, 50)
img = cv2.add(img, np.array([brightness, brightness, brightness]))
# 随机色彩调整
contrast = np.random.uniform(0.5, 1.5)
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
img = np.array(img, dtype=np.float64)
img[:, :, 1] = img[:, :, 1] * contrast
img[:, :, 2] = img[:, :, 2] * contrast
img[img > 255] = 255
img = np.array(img, dtype=np.uint8)
img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这个代码实现了以下数据增强操作:
随机裁剪
随机翻转
随机旋转
随机亮度调整
随机色彩调整
你可以根据自己的需求和数据集特点,调整这些操作的参数或添加其他操作。
接下来我会。
除了上面提到的数据增强操作,还有一些其他常用的数据增强方法,包括:
随机缩放:随机缩放图像的大小,可以增加数据的多样性。
随机平移:随机平移图像的位置,可以模拟不同的拍摄角度和场景。
随机剪切:随机剪切图像的一部分,可以增加数据的多样性。
随机噪声:向图像中添加随机噪声,可以模拟真实场景中的噪声。
随机模糊:随机对图像进行模糊处理,可以模拟真实场景中的运动模糊或镜头模糊。
下面是一个使用imgaug库实现数据增强的示例代码:
import imgaug.augmenters as iaa
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 定义增强器
seq = iaa.Sequential([
iaa.Resize({"height": 224, "width": 224}),
iaa.Fliplr(0.5),
iaa.Affine(rotate=(-10, 10)),
iaa.AdditiveGaussianNoise(scale=(0, 0.1*255)),
iaa.GaussianBlur(sigma=(0, 3.0))
])
# 对图像进行增强
img_aug = seq.augment_image(img)
# 显示图像
cv2.imshow('image', img_aug)
cv2.waitKey(0)
cv2.destroyAllWindows()
这个代码使用了imgaug库,它提供了丰富的数据增强方法,并且可以方便地组合多个增强方法。在这个示例中,我们使用了以下增强方法:
Resize:将图像缩放到指定大小。
Fliplr:以50%的概率水平翻转图像。
Affine:随机旋转图像。
AdditiveGaussianNoise:向图像中添加高斯噪声。
GaussianBlur:对图像进行高斯模糊处理。
你可以根据自己的需求和数据集特点,选择合适的增强方法和参数。