【问题标题】:How to compose multiple rectangles of different sizes into one using Python?如何使用 Python 将多个不同大小的矩形组合成一个?
【发布时间】:2020-05-17 07:42:37
【问题描述】:
我想做的事:
我有一个 png 图像文件,我想制作它的多个副本(每个都缩放到随机比例并旋转到随机度数),最后我需要将所有图像对象组合成一个大 png 文件。
我的思考过程:
缩放和旋转图像后,我需要检测每个小 png 图像对象的最小边界框(矩形),然后将所有矩形组合成一个大矩形(最终的大 png 文件)。
我的问题:
我找不到完成最终过程的方法:作曲。
感谢任何帮助。我对编程比较陌生(我正在学习 Python),所以如果你能提供一些关于如何做的细节,那将是最好的。
提前致谢。
【问题讨论】:
标签:
python
image
rectangles
【解决方案1】:
因此,这里的问题缺少一些细节,因此难以回答。首先,您加载图像的方式。我将假设您使用的是 Pillow 图像库,但您也可以轻松地使用(例如)imageio 将图像加载到 numpy 数组中,或者直接使用内置open,并将结果放入一堆lists。
其次,有多种“合成”图像的方法。您可能意味着创建一个输出图像,其中所有输入图像从左到右彼此相邻排列。您还可能意味着创建尽可能小的图像,以将所有旋转的图像组合在一起而不会重叠(一项艰巨的任务)。也不清楚您正在处理的 PNG 图像是否具有 alpha 通道(即部分透明)。
如果您使用 Pillow 并且只需将图片并排排列,那么this 链接应该可以回答您的问题。
这是你的意思吗?
【解决方案2】:
您应该能够像我在this 回答中那样使用带有蒙版的paste() 将您的小图像合成到背景画布上。
当您 rotate() 矩形时,您需要将 fill colour 设置为透明,否则旋转形状周围的空白区域将显示为黑色......当您 paste() 时,会破坏下面的任何内容。
【解决方案3】:
最好的方法是使用keras.preprocessing.image,在这个答案中,我使用的是你已经完成了你提到的图像增强,所以我会为你处理“合成”答案。
一旦你完成了扩充,你想使用img_to_array函数在numpy数组中使用它们,你可以使用它
from keras.preprocessing import image
# Say your image is stored in the variable img
x = image.img_to_array(img)
一旦你对所有的人都这样做了,你就可以开始将它们与一些numpy.zeros 连接起来进行缩进。
然后直接在numpy数组上使用函数save_img将这张图片保存到一个路径中。这可以按如下方式完成。
image.save_img('to the path you want', x)
你说你是编程新手,所以只是为了基本介绍,keras 实际上在人工智能中用于深度学习相关的东西。对于这样的东西,这些预处理功能实际上是惊人的。我还附上了他们正在使用的屏幕截图。
编辑:这是我很久以前用来理解它们的有用link。