Python图像增强之 图像覆盖(包括图像和label)

最近笔者在研究李飞飞的DenseFusion(对 笔者就是这么多才多艺爱好广泛 (逃 ), 工程中使用了图像增强的技术 。使用的数据集是YCB_Video_Dataset。
其中图像增强的操作之一就是:
使用000003中的两类物体,来作为000001 中的前景遮挡,并且更改label为遮挡之后的label图
在这里插入图片描述
本教程中仅使用: -color 和 -label后缀的图片 (其中label图指示了物体在图片上的类标,背景的类标为0)

import  numpy as np
from PIL import Image
import  random
import numpy.ma as ma
import  scipy.misc

#加载图片
img = np.array(Image.open('./000001-color.png'))
#坐标转换 这样才可以与掩码相乘
img = np.transpose(img,(2,0,1))

label = Image.open('./000001-label.png')



#加载前景图片 使用其中的两个类
front = np.array(Image.open('./000003-color.png'))
#坐标转换 这样才可以与掩码相乘
front = np.transpose(front, (2, 0, 1))

f_label =  np.array(Image.open('./000003-label.png'))
#获取前景图片的label 删去0即背景
front_label = np.unique(f_label).tolist()[1:]

if len(front_label) < 2:
    print('前景图片少于两类')
else:
    front_label = random.sample(front_label, 2)
    for f_i in front_label:
        mk = ma.getmaskarray(ma.masked_not_equal(f_label, f_i))
        # 第一次
        if f_i == front_label[0]:
            mask_front = mk
        else:
            # 得到的结果为  值不为front_label 的为True  值为front_label 的为 False
            mask_front = mask_front * mk

    label_masked = label * mask_front  + f_label * ~mask_front

    img_masked = img * mask_front + front * ~mask_front

    # 加入高斯噪声
    #img_masked = img_masked + np.random.normal(loc=0.0, scale=7.0, size=img_masked.shape)

    #存储
    img_masked = np.transpose(img_masked, (1, 2, 0))
    scipy.misc.imsave('./output-color.png', img_masked)
    scipy.misc.imsave('./output-label.png',label_masked)
    # img_masked = Image.fromarray(img_masked)
    # img_masked.save('./output-color.png')

得到的结果为:
在这里插入图片描述
在这里插入图片描述
从前景中选取两类合并之后:
在这里插入图片描述
其实相对应的label也已经覆盖
下面是将label图黑色背景(值为0)更改为白色背景(值为255)的结果 :
在这里插入图片描述

注:代码已经上传到我的github

猜你喜欢

转载自blog.csdn.net/qq_35649669/article/details/102934031