python - 在一张图像中裁剪多个边界框的最有效/最快的方法,超过数千张图像?
问题描述
我有一个包含大约 3000 张图像的数据集,如果我有它们位置的边界框坐标,我想裁剪每个图像的多个区域。唯一的问题是我的代码非常慢,我尝试过分析和使用 Cython,但有边际改进。我正在使用 Pillow 库进行裁剪,他们可能是实现此任务的更快方法吗?
边界框位置存储在 CSV 文件中。下面的代码遍历每个文件
train_label=pd.read_csv("train.csv")
for i in range(len(train_label.index)):
name=train_label["image_id"][i]; labels=train_label["labels"][i];
split_images(name,labels)
以及以下举重的功能。
def split_images(name, labels):
boundingboxes = np.array(labels.split(' ')).reshape(-1, 5)
for (unicode, x, y, w, h) in boundingboxes:
try:
# Create target Directory
os.mkdir('unicodes/{}'.format(str(unicode)))
except FileExistsError:
None
(x, y, w, h) = (int(x), int(y), int(w), int(h))
imsource = Image.open('train_images/{}.jpg'.format(name))
cropped_image = imsource.crop((x, y, x + w, y + h))
cropped_image.save('unicodes/{}/{}.jpg'.format(unicode, name))
如果有帮助,我将在 Google 云平台上远程运行代码。
解决方案
图片有多大?
可能值得研究一下枕头性能页面上的其他一些库建议,尤其是在效率方面。
ImageMagick是我的第一个想法。它非常强大,可以从命令行运行(参见文档)。批量裁剪整个文件夹很简单,尽管我不确定如何在不同区域裁剪每个图像(必须有办法)。一个 hacky 但可行的解决方案可能是使用 python 来处理 csv 并生成 ImageMagic 调用。
抱歉没有明确的解决方案。
推荐阅读
- c# - 授权中间件与过滤器的关系 Asp.net core
- node.js - 安装 react js 时如何在 npm 上解决这个问题?
- swagger - .NET 5.0 中的 nswag 错误,由于 StackOverflowException,进程正在终止
- java - Java自动装配问题
- android - Android Studio 与 Gradle Wrapper 通过终端生成的错误消息的差异
- java - 如何将数据添加到链接表?
- .net - AADB2C AuthenticationTicket 在 AuthorizationCodeReceived 中为空
- c# - SQL 依赖 C#
- node.js - AWS Lambda 无服务器项目的 NodeJS 版本 14 和 15 之间的斗争
- reactjs - 如何将 Klarna 脚本转换为 useEffect 函数