如何在Python中裁剪和存储边界框图像区域?

3

enter image description here

我的想法是使用给定图像的多个异常区域的边界框坐标,并裁剪这些区域以保存到单独的文件夹中。我已经编写了下面所示的代码,用于裁剪单个图像的多个边界框坐标,但是我也得到了我需要摆脱的边界框。
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)

你想要将图片存储在边界框内是吗? - Ashwin Phadke
@AshwinPhadke:确切地说,我想将多个边界框内的图像存储到单独的文件夹中,以供任何给定的输入图像使用。 - shiva
2个回答

4
在循环中使用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


谢谢。我现在能够裁剪边界框,代码已按上面所示进行了编辑,但是边界框会出现在裁剪中,我必须摆脱它们。如上图所示为样例。 - shiva
只需删除 image = cv2.rectangle(image, start_point, end_point, color, thickness) 这一行代码,这样就不会绘制蓝色矩形。或者将该行代码移动到 crop = ... 之后、imwrite 之前,如果您想保存带有所有边界框的大图像。 - fmw42
如果我的回答有帮助,请考虑给它一个赞。 - fmw42

0
我找到了一个解决方案。我删除了cv2.rectangle,只是因为我想存储边界框区域,以便边界框不会出现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接