Прямоугольники отсутствуют после использования транспонирования на изображении - PullRequest
0 голосов
/ 27 мая 2019

У меня есть функция, которая получает изображение и рисует на нем прямоугольники.

Прямоугольники кажутся повернутыми (транспонированными), и я хочу повернуть их на 90 градусов.

Чтобы добиться этого, я переставляю изображение перед рисованием прямоугольников, затем рисованием прямоугольников и транспонированием назад.

Результат: Только один «транспонированный / повернутый» прямоугольник вместо 3.

Если я вообще не переставлю изображение, у меня будет 3 повернутых прямоугольника (см. Первое изображение). Если я транспонирую изображение только в начале и не переставляю после использования rectangle.draw, то изображение транспонируется (не желательно), и появляются 3 нарисованных прямоугольника.

Что происходит при использовании Image.Transpose: при использовании Image.Transpose

Когда не используется Image.Transpose: Когда не используется Image.Transpose

def draw_bboxes_on_img(image_raw, bboxes, image_number, mxnet_inference, bbox_color='red'):
    """Draw the bounding boxes on the original input image and return it.

    Keyword arguments:
    image_raw -- a raw PIL Image
    bboxes -- NumPy array containing the bounding box coordinates of N objects, with shape (N,4).
    bbox_color -- an optional string specifying the color of the bounding boxes (default: 'blue')
    """
    #image_raw_transposed = np.transpose(image_raw[0], (1,0,2))
    #image_raw_orig = Image.fromarray(np.uint8(image_raw[0]))
    # Convert from np array to PIL Image
    image_raw = Image.fromarray(image_raw[0])
    image_raw = image_raw.transpose(Image.TRANSPOSE)
    draw = ImageDraw.Draw(image_raw)
    for box in bboxes[0]:
        x_coord = box.left
        y_coord = box.top
        width = box.width
        height = box.height
        left = max(0, np.floor(x_coord + 0.5).astype(int))
        top = max(0, np.floor(y_coord + 0.5).astype(int))
        right = min(image_raw.width, np.floor(x_coord + width + 0.5).astype(int))
        bottom = min(image_raw.height, np.floor(y_coord + height + 0.5).astype(int))
        draw.rectangle(((left, top), (right, bottom)), outline=bbox_color)
        print("{}, {}, {}, {}, {}, {} ".format(left,top,right,bottom, x_coord, y_coord))
        image_raw = image_raw.transpose(Image.TRANSPOSE)
        if mxnet_inference is True:
            image_raw.save('{}/img_with_bboxes/mxnet_bboxes/im_{}.jpg'.format(cwd, image_number))
        else:
            image_raw.save('{}/img_with_bboxes/tensorrt_bboxes/im_{}.jpg'.format(cwd, image_number))
    return image_raw
...