import cv2
import os.path
from PIL import Image
import numpy as np
#读取文件夹里面的图像数量 并返回filenum
def countFile(dir):
# 输入文件夹
tmp = 0
for item in os.listdir(dir):
if os.path.isfile(os.path.join(dir, item)):
tmp += 1
else:
tmp += countFile(os.path.join(dir, item))
return tmp
def get_image_path(read_path):
'''
读取数据集所有图片路径
:param read_path: dataset.txt文件所在路径
:return: 返回所有图像存储路径的列表
'''
with open(os.path.join(read_path), "r+", encoding="utf-8", errors="ignore") as f:
img_list = f.read().split('\n')
img_list.remove('') # 因为写入程序最后一个循环会有换行,所以最后一个元素是空元素,故删去
# print(f'Read total of images: {len(img_list)}')
return img_list
path='/xxx/dataset/celeba_test/'
filenum = countFile('/xxx/dataset/celeba_test/HR') # 返回的是图片的张数
print(filenum)
read_path='/xxx/dataset/celeba_test/celeba_test_list.txt'
# filenum
scale= 4 #下采样倍数
index = 1 #保存图片编号
num = 0 #处理图片计数
img_list=get_image_path(read_path)
#print(img_list)
for i in range(filenum):
########################################################
# 1.读取原始图片
#for img in img_list:
x=img_list[i].replace('png','jpg')
filename = '/xxx/dataset/celeba_test/HR/'+str(x)
#print(filename)
original_image = cv2.imread(filename)#numpy.ndarray
original_image1 = Image.fromarray(original_image.astype('uint8'))#image
# 2.下采样
if scale == 4:
img_1 = original_image1.resize((32,32), Image.BICUBIC)#PIL的resize需要传入的是img
img_1 = np.asarray(img_1)
if scale == 16:
img_1 = original_image1.resize((8,8),resample=Image.BICUBIC)
img_1 = np.asarray(img_1)
# 3.将下采样图片保存到指定路径当中
print(img_1)#<PIL.Image.Image image mode=RGB size=32x32 at 0x7FCD76AC9ED0>
save_path = path+'4*LR'
if not os.path.exists(save_path):
os.makedirs((save_path))
cv2.imwrite(save_path + '/'+str(img_list[i]) + '.png', img_1)
#cv2.imwrite 存入的需要是数组,不是img
num = num + 1
print("正在为第" + str(num) + "图片采样......")
index = index + 1
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交