我有一个总共 170 张图像的数据集。每个图像我想创建 36 个这样的图像。
通过从图像的顶部和左侧裁剪 5%,从左上角裁剪图像。然后,新的图像被缩小到原来的大小188x188。这种裁剪方法也可以从其他三个角落完成。同样的事情可以用 10% 的作物来完成。这导致除了原始图像之外还有 8 个图像。之后,这 9 个图像分别旋转了 0、90、180 和 270 度。因此,从每个输入图像中导出 36 个合成图像。
我需要这个数据集扩充的 python 代码。
我有一个总共 170 张图像的数据集。每个图像我想创建 36 个这样的图像。
通过从图像的顶部和左侧裁剪 5%,从左上角裁剪图像。然后,新的图像被缩小到原来的大小188x188。这种裁剪方法也可以从其他三个角落完成。同样的事情可以用 10% 的作物来完成。这导致除了原始图像之外还有 8 个图像。之后,这 9 个图像分别旋转了 0、90、180 和 270 度。因此,从每个输入图像中导出 36 个合成图像。
我需要这个数据集扩充的 python 代码。
如果您需要使用 Python 处理图像,首选库是PIL。在这里,我展示了一个函数来进行您已划定的修改。此代码不会管理多个文件,或者如何命名转换后的文件。但它确实显示了如何以您要求的方式修改图像。
from PIL import Image
def modify_image(im, crop_corner=None, crop_percent=5, rotate=0):
"""
Crop and rotate an image
:param im: base image
:param crop_corner: crop corner 0-3 clockwise from top left
:param crop_percent: crop percentage of size
:param rotate: rotate degrees (rotate after crop)
:return: a modified image
"""
x, y = im.size
if crop_corner is not None:
crop_x, crop_y = [int(i * crop_percent / 100.0) for i in (x, y)]
size_x = x - crop_x
size_y = y - crop_y
if crop_corner in (1, 2):
crop_x = 0
if crop_corner in (2, 3):
crop_y = 0
im = im.crop((crop_x, crop_y, crop_x + size_x-1, crop_y + size_y-1))
im = im.resize((x, y), Image.BICUBIC)
im = im.rotate(rotate, expand=True)
return im
test_image = Image.open('test_image.png')
new_image = modify_image(test_image, rotate=90)
new_image.show()
要保存图像,请参阅(文档)