Я пытаюсь обрезать изображения, которые распознаются при обнаружении объектов Tensorflow, в частности, при обнаружении одиночного снимка (SSD) со счетами более 0,5
Я могу получить значения ящиков из boxes = detect_graph.get_tensor_by_name ('detection_boxes: 0'). Это дает мне значения: - [0,11672725 0,15602385 0,29273796 0,20076124]. Затем я умножил первые два значения на ширину изображения и последние два на высоту изображения, чтобы получить абсолютное значение. Но когда я запускаю image_cropped = image_np [ymin: ymin + (ymax-ymin), xmin: xmin + (xmax-xmin)] и cv2.imwrite ("cropped.jpg", image_cropped). Я не получаю изображение в тех же координатах, что и обнаруженный объект.
boxes = np.reshape(boxes,(100,4)) #got the boxes values form boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
for i in range(length):
if scores[i] > 0.50:
detected_classes = classes[i]
detected_scores = scores[i]
detected_objects_list.append(detected_classes)
detected_scores_list.append(detected_scores)
#print(classes[i])
#print(scores[i])
#If the
if(detected_classes == 1):
coordinates = boxes[i]
print(coordinates)
xmin=coordinates[0].astype(int)*im_width
xmax= coordinates[1].astype(int)*im_width
ymin= coordinates[2].astype(int)*im_height
ymax= coordinates[3].astype(int)*im_height
image_cropped = image_np[ymin:ymin + (ymax-ymin), xmin:xmin + (xmax-xmin)]
cv2.imwrite("cropped.jpg",image_cropped)
Я хочу извлечь только те изображения, которые обнаружил ограничивающий прямоугольник.