Как обрезать изображение, полученное из "tenorflow's vis_util.visualisze _boxes_boxes_and_labels_on_image" - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь обрезать изображения, которые распознаются при обнаружении объектов 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)

Я хочу извлечь только те изображения, которые обнаружил ограничивающий прямоугольник.

...