首页 > 解决方案 > 在一张图像中裁剪多个边界框的最有效/最快的方法,超过数千张图像?

问题描述

我有一个包含大约 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 云平台上远程运行代码。

标签: pythonperformanceimage-processingpython-imaging-library

解决方案


图片有多大?

可能值得研究一下枕头性能页面上的其他一些库建议,尤其是在效率方面。

ImageMagick是我的第一个想法。它非常强大,可以从命令行运行(参见文档)。批量裁剪整个文件夹很简单,尽管我不确定如何在不同区域裁剪每个图像(必须有办法)。一个 hacky 但可行的解决方案可能是使用 python 来处理 csv 并生成 ImageMagic 调用。

抱歉没有明确的解决方案。


推荐阅读