把一张图片和另一张图片的像素按照自己定的比例进行融合,当然少不了大批量的处理~
我个人尝试去融合图片的过程中也是花费了不少时间
主要是想现在关于图像的库有好几个,每个库里的读取图片的函数优劣不一,我尝试了PIL,scipy,OpenCV都有试过,最后选取了这个scipy.misc作为实验中的读取图片的库,大家有什么见解也可以提供一起讨论~
import csv
import os
from PIL import Image
import tensorflow as tf
from scipy.misc import imread
from scipy.misc import imsave
import numpy as np
input_dir = "/home/NEWDISK/caad_images/keda_train" #融合图片一
input_csv = "/home/NEWDISK/caad_images" #融合图片二
mix_dir = "/home/NEWDISK/caad_images/mix" #融合图片一的名字 以及对应的融合图片二的名字
output_dir="/home/NEWDISK/CAAD/wujiekd/caad代码" #输出路径
def load_true_class(input_csv):
"""Loads target classes."""
with tf.gfile.Open(os.path.join(input_csv, 'dev_dataset.csv')) as f:
return {row[0] + '.png': int(row[6]) for row in csv.reader(f) if len(row) >= 2}
batch_shape = [10, 299, 299, 3]
def blend_two_images(input_dir):
filelist = os.listdir(input_dir)
total_num = len(filelist)
aa=0.5
i = 0
for item in filelist:
keda_str=input_dir+'/'+item
print(item)
print(keda_str)
if item.endswith('.png'):
image_kedaa = imread(keda_str, mode='RGB').astype(np.float) / 255.0
picture_adress = mix_dir + '/' + str(all_true_class[item]) + '.png'
if os.path.exists(picture_adress):
img2 = imread(picture_adress, mode='RGB').astype(np.float) / 255.0
image = image_kedaa * aa + img2 * (1 - aa)
else: image = image_kedaa
with tf.gfile.Open(os.path.join(output_dir, item), 'wb') as f:
imsave(f, image, format='png')
if __name__ == '__main__':
all_true_class = load_true_class(input_csv)
images = blend_two_images(input_dir)