如何使用原始文件名保存裁剪的图像?
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
【讨论】:
以上是关于如何使用原始文件名保存裁剪的图像?的主要内容,如果未能解决你的问题,请参考以下文章