"""Script to prepare resized images/labels for LPD."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import argparse
import os
import cv2
from PIL import Image
def parse_args(args=None):
"""parse the arguments."""
parser = argparse.ArgumentParser(description='Prepare resized images/labels dataset for LPD')
parser.add_argument(
"--input_dir",
type=str,
required=True,
help="Input directory to OpenALPR's benchmark end2end us license plates."
)
parser.add_argument(
"--output_dir",
type=str,
required=True,
help="Ouput directory to resized images/labels."
)
parser.add_argument(
"--target_width",
type=int,
required=True,
help="target width for resized images/labels."
)
parser.add_argument(
"--target_height",
type=int,
required=True,
help="target height for resized images/labels."
)
return parser.parse_args(args)
def prepare_data(input_dir, img_list, output_dir, output_size):
"""Crop the license plates from the orginal images."""
w, h = output_size
target_img_path = os.path.join(output_dir, "image")
target_label_path = os.path.join(output_dir, "label")
if not os.path.exists(target_img_path):
os.makedirs(target_img_path)
if not os.path.exists(target_label_path):
os.makedirs(target_label_path)
for img_name in img_list:
img_path = os.path.join(input_dir, img_name)
label_path = os.path.join(input_dir,
img_name.split(".")[0] + ".txt")
print("Resizing {} and its label".format(img_path))
# resize labels
img = cv2.imread(img_path)
(height, width, _) = img.shape
ratio_w = float(float(w)/float(width) )
ratio_h = float(float(h)/float(height) )
with open(label_path, "r") as f:
label_lines = f.readlines()
assert len(label_lines) == 1
label_items = label_lines[0].split()
assert img_name == label_items[0]
xmin = int(label_items[1])
ymin = int(label_items[2])
width = int(label_items[3])
xmax = xmin + width
height = int(label_items[4])
ymax = ymin + height
x1 = float(xmin) * ratio_w
y1 = float(ymin) * ratio_h
x2 = float(xmax) * ratio_w
y2 = float(ymax) * ratio_h
with open(os.path.join(target_label_path,
img_name.split(".")[0] + ".txt"), "w") as f:
f.write("lpd 0.0 0 0.0 {:.2f} {:.2f} {:.2f} {:.2f} 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n".format(x1, y1, x2, y2))
# resize images
image = Image.open(img_path)
scale_image = image.resize(output_size, Image.ANTIALIAS)
scale_image.save(os.path.join(target_img_path, img_name))
def main(args=None):
"""Main function for data preparation."""
args = parse_args(args)
w = args.target_width
h = args.target_height
output_size = (w,h)
img_files = []
for file_name in os.listdir(args.input_dir):
if file_name.split(".")[-1] == "jpg":
img_files.append(file_name)
image_dir = os.path.join(args.output_dir, "data")
prepare_data(args.input_dir, img_files, image_dir, output_size)
print("\nDone. Resized images/labels are saved at {} folder".format(args.output_dir))
if __name__ == "__main__":
main()
改变图片大小(1)
import os
import cv2
def resize_img(DATADIR, img_size):
w = img_size[0]
h = img_size[1]
'''设置目标像素大小,此处设为300'''
path = os.path.join(DATADIR)
# 返回path路径下所有文件的名字,以及文件夹的名字,
img_list = os.listdir(path)
for i in img_list:
if i.endswith('.jpg'):
# 调用cv2.imread读入图片,读入格式为IMREAD_COLOR
img_array = cv2.imread((path + '/' + i), cv2.IMREAD_COLOR)
# 调用cv2.resize函数resize图片
new_array = cv2.resize(img_array, (w, h), interpolation=cv2.INTER_CUBIC)
img_name = str(i)
'''生成图片存储的目标路径'''
save_path = 'D:/spec/masks/train/'
if os.path.exists(save_path):
print(i)
'''调用cv.2的imwrite函数保存图片'''
save_img = save_path + img_name
cv2.imwrite(save_img, new_array)
else:
os.mkdir(save_path)
save_img = save_path + img_name
cv2.imwrite(save_img, new_array)
if __name__ == '__main__':
# 设置图片路径
DATADIR = "D:/data/masks/train"
#data_k = "yuantu_resize/"
# 需要修改的新的尺寸
img_size = [320, 320]
#resize_img(DATADIR, data_k, img_size)
resize_img(DATADIR, img_size)
改变图片大小(方法二)
# 批量修改尺寸
import os
from PIL import Image
dir_img = "D:/data/masks/val/"
dir_save = "D:/spec/masks/val/"
size = (320, 320)
# 获取目录下所有图片名
list_temp = os.listdir(dir_img)
list_img = list_temp[1:] # 因为列表中第0项为Mac OS X操作系统所创造的隐藏文件 .DS_Store,所以从第一项开始取
# 获得路径、打开要修改的图片
for img_name in list_img:
img_path = dir_img + img_name
old_image = Image.open(img_path)
save_path = dir_save + img_name
# 保存修改尺寸后的图片
old_image.resize(size, Image.ANTIALIAS).save(save_path)
print("Done!")