如何使用原始文件名保存裁剪的图像?

Posted

技术标签:

【中文标题】如何使用原始文件名保存裁剪的图像?【英文标题】:How to save cropped images with their original filename? 【发布时间】:2020-02-13 14:09:17 【问题描述】:

我写了一个小代码块来保存裁剪的图像,在基于它们的类的文件中。 问题是,这些图像是用前缀 BB_Shirt 或 BB_Short 保存的,但现在我想用相同的前缀保存它们,但还要添加图像的原始文件名:

我有这些图片:Prv_image_1021

裁剪后的对象将保存为以下内容: (假设有 4 个对象),我希望我的输出是 BB_衬衫_1021_1, BB_Short_1021_2 , BB_衬衫_1021_3, BB_Short_1021_4

这是我的代码:

for i in idxs.flatten():
    # extract the bounding box coordinates
    (x, y) = (boxes[i][0], boxes[i][1])
    (w, h) = (boxes[i][2], boxes[i][3])

    # draw a bounding box rectangle and label on the image
    color = [int(c) for c in COLORS[classIDs[i]]]
    cv2.rectangle(image, (x, y), (x + w, y + h), color, 2)
    text = ": :.4f".format(LABELS[classIDs[i]], confidences[i])
    cv2.putText(image, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX,
        0.5, color, 2)
    # Saving our detected objects with respect to the Label
    img=image[y:y + h,x:x + w]
    if LABELS[classIDs[i]] == 'short':
        filename = "Shorts/BB_short_%d.jpg"%i
        cv2.imwrite(filename,img)
    else:
        filename = "Shirts/BB_shirt_%d.jpg"%i
        cv2.imwrite(filename,img)
    i+=1

任何关于如何做到这一点的建议将不胜感激,谢谢。

【问题讨论】:

【参考方案1】:

使用 enumerate() 跟踪索引,然后将索引附加到文件名。

list_idxs = idxs.flatten()
for index, i in enumerate(list_idxs):
    # extract the bounding box coordinates
    (x, y) = (boxes[i][0], boxes[i][1])
    (w, h) = (boxes[i][2], boxes[i][3])

    # draw a bounding box rectangle and label on the image
    color = [int(c) for c in COLORS[classIDs[i]]]
    cv2.rectangle(image, (x, y), (x + w, y + h), color, 2)
    text = ": :.4f".format(LABELS[classIDs[i]], confidences[i])
    cv2.putText(image, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX,
        0.5, color, 2)
    # Saving our detected objects with respect to the Label
    img=image[y:y + h,x:x + w]
    if LABELS[classIDs[i]] == 'short':
        filename = f"Shorts/BB_short_i_index.jpg"
        cv2.imwrite(filename,img)
    else:
        filename = f"Shirts/BB_shirt_i_index.jpg"
        cv2.imwrite(filename,img)
    i+=1

【讨论】:

以上是关于如何使用原始文件名保存裁剪的图像?的主要内容,如果未能解决你的问题,请参考以下文章

我只想将裁剪后的图像保存到图库中。但它保存了原始的完整图像。如何只保存裁剪的图像?

如何在 vb.net 中保存对原始图像的更改?

捕获和裁剪图像并保存裁剪的图像

Laravel 多次上传图像预览然后裁剪

如何在 Opencv 中使用 CgRect 裁剪图像。

如何裁剪图像并从原始图像设置其裁剪范围