Python批量增强图像

Python批量增强图像

基于深度学习的计算机视觉任务,训练模型需丰富的数据集,以提高训练模型的泛化性。当训练数据集图像数量较少时,使用此增强程序批量处理image和mask

图像增强Python程序

import cv2
import glob
import numpy as np

def random_crop_flip(inp_img, gt_img):
    """
    随机裁剪和翻转图像
    :param inp_img:一个 HxWxC 输入图像
    :param gt_img:一个 HxW 输入图像
    :return:随机裁剪和翻转的图像
    """
    h, w = gt_img.shape

    rand_h = np.random.randint(h/8)  # / 除
    rand_w = np.random.randint(w/8)
    offset_h = 0 if rand_h == 0 else np.random.randint(rand_h)
    offset_w = 0 if rand_w == 0 else np.random.randint(rand_w)
    p0, p1, p2, p3 = offset_h, h+offset_h-rand_h, offset_w, w+offset_w-rand_w

    rand_flip = np.random.randint(10)  # 返回一个随机整数
    if rand_flip >= 5:
        inp_img = inp_img[::, ::-1, ::]  # [::-1] 反向排序 [:-1] 从位置0到-1之前的数
        out_img = gt_img[::, ::-1]

    return inp_img[p0:p1, p2:p3], gt_img[p0:p1, p2:p3]
    
def random_rotate(inp_img, gt_img, max_angle=25):
    """
    在+max_angle到-max_angle角度内随机旋转图像
    旋转max_angle角度
    :param inp_img:一个 HxWxC 输入图像
    :param gt_img:一个 HxW 输入GT图像
    :param max_angle:图像可以在任意方向旋转的最大角度
    :return:随机旋转的图像
    """
    # angle = np.random.randint(-max_angle, max_angle) # 返回一个随机角度
    angle = max_angle # 旋转max_angle角度
    h, w = gt_img.shape
    center = (w / 2, h / 2)

    M = cv2.getRotationMatrix2D(center, angle, 1.0)  # 给定一个旋转中心点的坐标、旋转角度和缩放因子,返回一个仿射变换矩阵 M
    cos = np.abs(M[0, 0])
    sin = np.abs(M[0, 1])

    #  计算图像的新尺寸并调整旋转矩阵
    new_w = int((h * sin) + (w * cos))
    new_h = int((h * cos) + (w * sin))
    M[0, 2] += (new_w / 2) - center[0]
    M[1, 2] += (new_h / 2) - center[1]

    return cv2.warpAffine(inp_img, M, (new_w, new_h)), cv2.warpAffine(gt_img, M, (new_w, new_h))
    
def random_rotate_lossy(inp_img, gt_img, max_angle):
    """
    在+max_angle到-max_angle角度内随机旋转图像
    旋转max_angle角度
    :param inp_img:一个 HxWxC 输入图像
    :param gt_img:一个 HxW 输入图像
    :param max_angle:图像可以在任意方向旋转的最大角度
    :return:随机旋转的图像
    """
    # angle = np.random.randint(-max_angle, max_angle) # 在+max_angle到-max_angle角度内随机旋转图像
    angle = max_angle # 旋转max_angle角度
    h, w = gt_img.shape
    center = (w / 2, h / 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    return cv2.warpAffine(inp_img, M, (w, h)), cv2.warpAffine(gt_img, M, (w, h))

def random_brightness(inp_img, gt_img):
    """
    随机扰动输入图像的亮度
    :param inp_img:一个 HxWxC 输入图像
    :return:亮度随机扰动的图像
    """
    contrast = np.random.rand(1) + 0.5  # 返回一个随机数,随机数位于[0, 1)中
    light = np.random.randint(-20, 20)
    inp_img = contrast * inp_img + light

    return np.clip(inp_img, 0, 255), gt_img  # np.clip 将一个nd.array的值限制在给定的上下界, 如果元素值小于下界则将值改为下界值a_min, 同理如果大于上界,则将值改为上界值a_max

def aug(image, mask, image_names, mask_names, k):
    image = cv2.imread(image)
    mask = cv2.imread(mask,0)
    image_rotate, mask_rotate = random_rotate_lossy(image, mask, max_angle=90)
    # image_crop_flip, mask_crop_flip = random_crop_flip(image, mask)
    # image_brigh, mask_brigh = random_brightness(image, mask)
    for image_name in image_names: 
        image_name = image_names[k]
        save_image_path = image_name.split('.')[0]+ '_rotate90'+ '.png'
        cv2.imwrite(save_image_path, image_rotate)
    for mask_name in mask_names: 
        mask_name = mask_names[k]
        save_mask_path = mask_name.split('.')[0]+ '_rotate90'+ '.png'
        cv2.imwrite(save_mask_path, mask_rotate)
    k += 1
        
    
if __name__ == '__main__':
    
    image_path = 'H:/image/train/'  
    mask_path =  'H:/gt/train/' 
    
    image_names = sorted(glob.glob(image_path  + '*.jpg'))
    mask_names = sorted(glob.glob(mask_path  + '*.png'))
    idx = 0
    for picture_name in image_names:
        print(mask_names[idx])
        aug(image_names[idx], mask_names[idx], image_names, mask_names, idx) 
        idx += 1

希望本文对大家有帮助,上文若有不妥之处,欢迎指正。

分享决定高度,学习拉开差距

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
回答: 在Python中,可以使用各种库来实现批量图像增强。其中最常用的库之一是OpenCV。OpenCV是一个开源的计算机视觉库,提供了许多图像处理增强的功能。 要批量进行图像增强,你可以使用循环来遍历图像文件夹中的每个图像,并对每个图像应用所需的增强操作。以下是一个简单的示例代码,演示了如何使用OpenCV来批量进行图像增强: ```python import cv2 import os # 定义图像增强函数 def enhance_image(image): # 在这里添加你想要的图像增强操作,例如调整亮度、对比度、锐化等 # 这里只是一个示例,你可以根据自己的需求进行修改 enhanced_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) enhanced_image = cv2.equalizeHist(enhanced_image) return enhanced_image # 定义图像文件夹路径 image_folder = 'path/to/your/image/folder' # 遍历图像文件夹中的每个图像 for filename in os.listdir(image_folder): # 读取图像 image_path = os.path.join(image_folder, filename) image = cv2.imread(image_path) # 进行图像增强 enhanced_image = enhance_image(image) # 保存增强后的图像 enhanced_image_path = os.path.join(image_folder, 'enhanced_' + filename) cv2.imwrite(enhanced_image_path, enhanced_image) ``` 在上述代码中,首先定义了一个`enhance_image`函数,用于实现图像增强操作。然后,通过遍历图像文件夹中的每个图像,读取图像并应用图像增强操作。最后,将增强后的图像保存到同一文件夹中,并添加前缀"enhanced_"。 请注意,上述代码只是一个简单的示例,你可以根据自己的需求来修改图像增强操作。另外,还有其他的图像处理库,如PIL、scikit-image等,也可以用于实现图像增强

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁棒最小二乘支持向量机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值