#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. Вы абсолютно правы, координата урожая была неправильной. Как только я удалил его, все было в порядке. Могу ли я написать несколько строк кода, которые подскажут программе перейти к следующему файлу вместо того, чтобы останавливать код и выдавать ошибку?