使用 python 裁剪边界框

Posted

技术标签:

【中文标题】使用 python 裁剪边界框【英文标题】:Crop bounding boxes using python 【发布时间】:2021-06-15 07:40:04 【问题描述】:

获取边界框坐标的代码:

width=600
height=900
for box,score,cls in zip(detections['detection_boxes']  [0],detections['detection_scores'][0],detections['detection_classes'][0]):
   if score >= 0.5: # or any other value
      xmin = box[1]*width
      ymin = box[0]*height
      xmax = box[3]*width
      ymax = box[2]*height
      print("xmin:  ".format(xmin),"ymin: ".format(ymin),"xmax: ".format(xmax),"ymax: ".format(ymax))

它给出:

现在我想根据这些边界框裁剪图像。如何裁剪所有这些坐标并存储为 jpg 文件?

【问题讨论】:

使用tf.image.crop_and_resize:tensorflow.org/api_docs/python/tf/image/crop_and_resize 种植很难,你能详细说明一下,具体怎么做。 【参考方案1】:

如果你想使用 tensorflow,你可以使用:

cropped_image_tensor = tf.image.crop_to_bounding_box(image, xmin, ymin, height, width)

然后从张量到图像:

output_image = tf.image.encode_png(cropped_image_tensor)

【讨论】:

【参考方案2】:

如果您将图像存储为 numpy 数组,则可以在图像上使用它:

cropped_image = image[ymin:ymax, xmin:xmax:, :]

我假设您的图像尺寸是高度、宽度、通道数。

然后将图像保存为jpg:

from PIL import Image

im = Image.fromarray(cropped_image)
im.save("your_file.jpeg")

【讨论】:

以上是关于使用 python 裁剪边界框的主要内容,如果未能解决你的问题,请参考以下文章

如何在python opencv中简单地裁剪边界框[重复]

Python 和 OpenCV:如何裁剪半成形的边界框

如何在每一行上绘制单个边界框,裁剪边界框并将图像保存在文件夹 opencv python

opencv-python:如何用边界框坐标裁剪图像[重复]

如何使用边界框裁剪图像

使用边界框列表从图像中裁剪多个边界框