Pytorch对图像增强的python实现

直接上代码
介绍的也比较详细

import torchvision.transforms.functional as TF
from PIL import Image
import os
from skimage.util import random_noise
from skimage.filters import gaussian
import cv2

# 擦除图像中某块区域
def erase_and_save(image_path, target_dir, position, size):
    """
    按照指定的位置和长宽擦除
    :param image_path: 输入图像路径
    :param target_dir: 目标图像路径
    :param position: 擦除的左上角坐标
    :param size: 擦除的长宽值
    :return: 返回擦除后的图像
    """
    image = TF.to_tensor(Image.open(image_path))
    erased_image = TF.to_pil_image(TF.erase(img=image,
                            i=position[0],
                            j=position[1],
                            h=size[0],
                            w=size[1],
                            v=1))
    erased_image.save(os.path.join(target_dir, os.path.basename(image_path[:-4]))+"_erased_.jpg")
    return erased_image

# 任意角度旋转
def rotate_and_save(image_path, target_dir, angles_list):
    """
    按照一系列的指定角度旋转输入图像并保存
    :param image_path:输入图像路径
    :param target_dir:目标图片存储目录
    :param angles_list: 需要对输入图像进行多少角度的旋转
    :return: 完成后以列表形式返回所有的旋转后图像
    """
    image = Image.open(image_path)

    # 创建旋转后的图像容器
    image_list = []
    for angle in angles_list:
        rotated_image = TF.rotate(img=image, angle=angle, resample=Image.NEAREST)
        # 按照原始image_path的图片名称作为目标图像名称
        # 获取图片名称并去掉后缀".jpg"
        rotated_image.save(os.path.join(target_dir, os.path.basename(image_path[:-4])) + "_" + str(angle) + "_.jpg")
        image_list.append(rotated_image)
    return image_list

# 水平和垂直翻转
def vflip_and_save(image_path, target_dir):
    """
    垂直旋转翻转图像,并保存
    :param image_path: 输入图像路径
    :param target_path: 目标图片存储目录,如"d/"
    :return: 返回旋转后的图片
    """
    image = Image.open(image_path)
    vertical_image = TF.vflip(img=image)
    vertical_image.save(os.path.join(target_dir, os.path.basename(image_path[:-4]))+"_v_.jpg")

    return vertical_image

def hflip_and_save(image_path, target_dir):
    """
    垂直旋转翻转图像,并保存
    :param image_path: 输入图像路径
    :param target_path: 目标图片存储目录,如"d/"
    :return: 返回旋转后的图片
    """
    image = Image.open(image_path)
    horizontal_image = TF.hflip(img=image)
    horizontal_image.save(os.path.join(target_dir, os.path.basename(image_path[:-4]))+"_h_.jpg")

    return horizontal_image


def brightness_and_save(image_path, target_dir):
    
    '''
    图像变暗变亮
    :param image_path: 输入图像路径
    :param target_dir: 目标图片存储目录,如"d/"
    :return: 变换后的图片
    '''
    # brightness_factor=[0,2]  ==1 原图相不发生变化, 小于1变亮,大于1变暗。
    image = Image.open(image_path)
    brightness_image = TF.adjust_brightness(image, brightness_factor=0.5)
    brightness_image.save(os.path.join(target_dir, os.path.basename(image_path[:-4]))+"_brightness_.jpg")

    return brightness_image


def adjust_hue_and_save(image_path, target_dir):
    
    image = Image.open(image_path)
    adjust_hue_image = TF.adjust_hue(image, hue_factor=0.5)
    adjust_hue_image.save(os.path.join(target_dir, os.path.basename(image_path[:-4])) + "_adjust_.jpg")

    return adjust_hue_image


# 非数据增强方法,而是图像增强
def gamma_and_save(image_path, target_dir, gamma_value):
    """
    进行伽马变换并保存
    :param image_path: 输入图片路径
    :param target_dir: 目标图像存储目录
    :param gamma_value: 伽马值
    :return: 伽马变换后的图像
    """
    image = Image.open(image_path)
    gamma_image = TF.adjust_gamma(img=image, gamma=gamma_value)
    gamma_image.save(os.path.join(target_dir, os.path.basename(image_path[:-4]))+"_gamma_.jpg")
    return gamma_image


if __name__ == '__main__':
    # 测试效果,若批量图像可以写个循环。数据太多的话用多线程处理
    image_path = '/home/bitwenzi/1/00000001.jpg'
    target_dir = '/home/bitwenzi/2'
    rotate_and_save(image_path, target_dir, angles_list=[10,20,30,40])
    vflip_and_save(image_path, target_dir)
    gamma_and_save(image_path, target_dir, gamma_value=0.1)
    adjust_hue_and_save(image_path, target_dir)
    brightness_and_save(image_path, target_dir)
    hflip_and_save(image_path, target_dir)
    # res1 = erase_and_save(image_path, target_dir, position=[200,200], size=[50,50])
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值