Как обрезать ограничительные рамки для нескольких объектов с помощью OpenCV?

#python #opencv

Вопрос:

Я использую opencv для обрезки объектов с помощью ограничивающих рамок. Код не работает, если для одного изображения имеется несколько полей. Информация о ограничительной рамке сохраняется в файле csv. Например, два объекта, которые необходимо обрезать, образуют одно и то же изображение, но разные ограничительные рамки.

 Camera4_03-22-18_15-01.png  647 785 1533 1148   LUT-170
Camera4_03-22-18_15-01.png -442 852 339 1257    LUT-170

My code is:

df = pd.read_csv("Camera_1.csv")

img_list = df['Name'].tolist()
x_min = df['x_min'].tolist()
x_max = df['x_max'].tolist()
y_min = df['y_min'].tolist()
y_max = df['y_max'].tolist()
labels = df['Labels'].tolist()


for i in range(len(df)): 
    img = cv2.imread(img_list[i])   
    img = cv2.rectangle(img, (x_min[i],y_min[i]), (x_max[i],y_max[i]), (0,255,0),2) 
    cropped_img = img[ y_min[i]:y_max[i], x_min[i]:x_max[i]]

The error is:

---> 33     cv2.imwrite(labels[i] 'labels_{}.png'.format(i), cropped_img)
     34 
     35 

error: OpenCV(4.5.3) /tmp/pip-req-build-afu9cjzs/opencv/modules/imgcodecs/src/loadsave.cpp:803: error: (-215:Assertion failed) !_img.empty() in function 'imwrite'
 

Комментарии:

1. Твой образ пуст. Очевидно, ваши координаты урожая ошибочны. Вы должны распечатать свои минимальные и максимальные значения x,y, чтобы убедиться, что вы получаете хорошие значения, как и ожидалось, из вашего csv.

2. Вы абсолютно правы, координата урожая была неправильной. Как только я удалил его, все было в порядке. Могу ли я написать несколько строк кода, которые подскажут программе перейти к следующему файлу вместо того, чтобы останавливать код и выдавать ошибку?