【问题标题】:How to crop and store bounding box image regions in Python?如何在 Python 中裁剪和存储边界框图像区域?
【发布时间】:2020-09-01 15:06:56
【问题描述】:

我的想法是使用给定图像的异常区域的多个边界框坐标并裁剪这些区域以保存到单独的文件夹中。我已经编写了如下所示的代码,以裁剪单个图像的这些多个边界框坐标,但是,我也得到了我必须摆脱的边界框。

import pandas as pd
import cv2
import numpy as np

df = pd.read_csv('excel1.csv')
image = cv2.imread('image2.png')
im_name = 'image2.png'

for i in range(len(df)):
    name = df.loc[i]['filename']
    if name == im_name:
        start_point = (df.loc[i]['x'],df.loc[i]['y'])  
        end_point = (df.loc[i]['x']+df.loc[i]['width'],df.loc[i]['y']+df.loc[i]['height'])  
        color = (128, 0, 0)  
        thickness = 2  
        image = cv2.rectangle(image, start_point, end_point, color, thickness) 
        crop = image[df.loc[i]['y']:df.loc[i]['y']+df.loc[i]['height'],
                     df.loc[i]['x']:df.loc[i]['x']+df.loc[i]['width']]
        cv2.imwrite("cropped/crop_{0}.png".format(i), crop)  
cv2.imwrite('bb.png', image)

【问题讨论】:

  • 你想把图片存储在bounding box里面是吗?
  • @AshwinPhadke:没错。我想将多个边界框内的图像存储到任何给定输入图像的单独文件夹中。

标签: python opencv crop bounding-box


【解决方案1】:

在循环中使用 numpy 切片,然后在循环内使用 Python/OpenCV imwrite() 进行裁剪,为循环的每次迭代使用不同的名称

crop = image[ystart:ystop, xstart:xstop]
cv2.imwrite("crop_{0}.png".format(i), crop)


如果您希望它们转到不同的文件夹,您还可以为要写入的每个图像添加不同的路径。

对于 numpy 切片,请参阅https://www.w3schools.com/python/numpy_array_slicing.asp

【讨论】:

  • 谢谢。我现在可以裁剪边界框,对代码进行了编辑,如上所示,但边界框与我必须摆脱的裁剪一起出现。示例图如上所示。
  • 只需删除image = cv2.rectangle(image, start_point, end_point, color, thickness) ,这样您就不会绘制蓝色矩形。如果您想保存带有所有边界框的较大图像,或者将该行移至 crop = ... 之后和 imwrite 之前进行裁剪。
  • 如果我的回答有帮助,请考虑给它投票。
【解决方案2】:

我找到了解决方案。我删除了 cv2.rectangle 只是因为我打算只存储边界框区域,这样边界框就不会出现。

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 2019-01-31
    • 2018-10-24
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多