包的导入
path = r"D:\\"
# sometimes = lambda aug: iaa.Sometimes(0.5, aug)
img = cv2.imread("D:\\photo\\test.jpg")
img = cv2.resize(img,(128,128))
# img = cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)
cv2.imwrite(path+"img.jpg",img)
随机裁剪区域,使用灰度填充0.05为比例
aug = iaa.Cutout(size=0.05) # 随机裁剪区域,使用灰度填充0.05为比例
images_aug = aug(images=img)
cv2.imwrite(path+"Cutout.jpg",images_aug)
随机移除几个区域,用黑色填充
aug = iaa.Dropout(p=(0.0, 0.5), per_channel=True) # 随机移除几个区域,用黑色填充
images_aug = aug(images=img)
cv2.imwrite(path+"Dropout.jpg",images_aug)
运动模糊
aug = iaa.MotionBlur(k=7, angle=360, direction=1, order=1) # 运动模糊
images_aug = aug(images=img)
cv2.imwrite(path+"MotionBlur.jpg",images_aug)
高斯模糊
aug = iaa.GaussianBlur(sigma=2.0) #高斯模糊
(B,G,R) = cv2.split(img)
images_aug_B = aug(images=B)
images_aug_G = aug(images=G)
images_aug_R = aug(images=R)
images_aug = cv2.merge([images_aug_B,images_aug_G,images_aug_R])
cv2.imwrite(path+"GaussianBlur.jpg",images_aug)
脉冲噪声
aug = iaa.ImpulseNoise(0.5) #脉冲噪声
images_aug = aug(images=img)
cv2.imwrite(path+"ImpulseNoise.jpg",images_aug)
中心裁剪指定大小
aug = iaa.CropToFixedSize(512,512, seed = 6,position="center") #中心裁剪指定大小
(B,G,R) = cv2.split(img)
images_aug_B = aug(images=B)[0]
images_aug_G = aug(images=G)[0]
images_aug_R = aug(images=R)[0]
images_aug = cv2.merge([images_aug_B,images_aug_G,images_aug_R])
cv2.imwrite(path+"CropToFixedSize.jpg",images_aug)
形状变换需要单通道
aug = iaa.Affine(scale=(0.5,1.5),translate_px={"x": (-16, 16), "y": (-16, 16)}, shear={"x": (-15, 15), "y": (-15, 15)}) #形状变换需要单通道
Gray= cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)
images_aug = aug(images=Gray)
cv2.imwrite(path+"Affine.jpg",images_aug)
局部仿射变换
aug = iaa.PiecewiseAffine(scale=(0,0.2)) #局部仿射变换
Gray= cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)
images_aug = aug(images=Gray)
cv2.imwrite(path+"PiecewiseAffine.jpg",images_aug)
使用位移场移动像素变换
aug = iaa.ElasticTransformation(alpha=(0,40),sigma=(4,8)) #使用位移场移动像素变换
Gray= cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)
images_aug = aug(images=Gray)
cv2.imwrite(path+"ElasticTransformation.jpg",images_aug)
增强边缘,将其变为黑白,结果与原始图像叠加
aug = iaa.EdgeDetect(alpha=(0,0.75)) #增强边缘,将其变为黑白,结果与原始图像叠加
Gray= cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)
images_aug = aug(images=Gray)
cv2.imwrite(path+"EdgeDetect.jpg",images_aug)
直方图均衡
aug = iaa.HistogramEqualization() #直方图均衡
images_aug = aug(images=img)
cv2.imwrite(path+"HistogramEqualization.jpg",images_aug)
使用伽马函数改变对比度
aug = iaa.GammaContrast(gamma=(0.7,2.0)) #使用伽马函数改变对比度
images_aug = aug(images=img)
cv2.imwrite(path+"GammaContrast.jpg",images_aug)
使用sigmoid函数改变对比度
aug = iaa.SigmoidContrast(gain=(5,6)) #使用sigmoid函数改变对比度
images_aug = aug(images=img)
cv2.imwrite(path+"SigmoidContrast.jpg",images_aug)
对比受限的自适应直方图
aug = iaa.AllChannelsCLAHE(clip_limit=(0.1,8)) #对比受限的自适应直方图
images_aug = aug(images=img)
cv2.imwrite(path+"AllChannelsCLAHE.jpg",images_aug)
前景与背景的合并
aug = iaa.BlendAlpha((0.0, 1.0),iaa.Affine(rotate=(-20, 20)),per_channel=0.5) #前景与背景的合并
Gray= cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)
images_aug = aug(images=Gray)
cv2.imwrite(path+"BlendAlph.jpg",images_aug)
旋转变换,不丢失边缘
aug = iaa.Affine(fit_output=True,rotate=60) #旋转变换,不丢失边缘
Gray= cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)
images_aug = aug(images=Gray)
cv2.imwrite(path+"Affine_true.jpg",images_aug)
旋转变换,丢失边缘
aug = iaa.Affine(rotate=60) #旋转变换,丢失边缘
Gray= cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)
images_aug = aug(images=Gray)
cv2.imwrite(path+"Affine_flase.jpg",images_aug)
旋转变换,边缘复制
aug = iaa.Affine(rotate=60, mode="edge") #旋转变换
'''
* ``constant`` -> ``cv2.BORDER_CONSTANT``
* ``edge`` -> ``cv2.BORDER_REPLICATE``
* ``symmetric`` -> ``cv2.BORDER_REFLECT``
* ``reflect`` -> ``cv2.BORDER_REFLECT_101``
* ``wrap`` -> ``cv2.BORDER_WRAP``
'''
Gray= cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)
images_aug = aug(images=Gray)
cv2.imwrite(path+"Affine_mode.jpg",images_aug)
整体使用方法为序列模型
import imgaug.augmenters as iaa
import cv2
sometimes = lambda aug: iaa.Sometimes(0.5, aug)
seq = iaa.Sequential([
iaa.Fliplr(0.5), # 对50%的图像进行上下翻转
iaa.Flipud(0.5), # 对50%的图像做镜像翻转
#OneOf中选一种算术运算
sometimes(iaa.OneOf([
iaa.Multiply(mul=(0.8,1.2),per_channel=False), # 像素相乘系数
iaa.Add(value=(-20,20),per_channel=False), # 像素加减
iaa.Cutout(size=0.2), # 随机裁剪区域,使用灰度填充0.05为比例
iaa.Dropout(p=(0.0, 0.5), per_channel=False) # 随机移除几个区域,用黑色填充
])),
#OneOf中选一种形状变化
sometimes(iaa.OneOf([
iaa.Affine(
scale={"x": (0.8, 1.2), "y": (0.8, 1.2)},#图像缩放为80%到120%之间
translate_percent={"x": (-0.2, 0.2), "y": (-0.2, 0.2)}, #平移±20
rotate=(-45, 45), #旋转±45度之间
shear=(-16, 16), #剪切变换±16度,(矩形变平行四边形)
order=[0, 1], #使用最邻近差值或者双线性差值
cval=(0, 255), #全白全黑填充
mode="edge", #定义填充图像外区域的方法
fit_output=True,#是否保持边缘丢失
),
iaa.PiecewiseAffine(scale=(0,0.04)), #局部仿射变换
iaa.ElasticTransformation(alpha=(0,40),sigma=(4,8)), #使用位移场移动像素变换
iaa.PerspectiveTransform(scale=(0,0.06)) #随机四点透视变换
])),
#OneOf中选一种模糊方法
sometimes(iaa.OneOf([
iaa.GaussianBlur(sigma=2.0), # 高斯模糊
iaa.AverageBlur(k=(2, 7)), # 均值模糊
iaa.MedianBlur(k=(3, 11)), # 种植模糊
iaa.MotionBlur(k=(3, 7), angle=(0, 360)) # 运动模糊
])),
#OneOf中选一种边缘方法
sometimes(iaa.OneOf([
iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),
iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0)),
iaa.EdgeDetect(alpha=(0,0.75)),
iaa.DirectedEdgeDetect(
alpha=(0, 0.7), direction=(0.0, 1.0)
)# 增强特定方向上的边缘
])),
#OneOf中选一种对比度增强方法
sometimes(iaa.OneOf([
iaa.HistogramEqualization(), #直方图均衡
iaa.GammaContrast(gamma=(0.7, 1.7)), #使用伽马函数改变对比度
iaa.SigmoidContrast(gain=(5,6)), #使用sigmoid函数改变对比度
iaa.AllChannelsCLAHE(clip_limit=(0.1,8)) #对比受限的自适应直方图
])),
],
random_order=True # 随机的顺序把这些操作用在图像上
)
img = cv2.imread("D:\\photo\\test.jpg")
img = cv2.resize(img,(128,128))
Gray= cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)
Img = seq.augment_image(Gray)
下图转自:https://blog.youkuaiyun.com/qq_36489878/article/details/108650050