У меня есть функция, которая получает изображение и рисует на нем прямоугольники.
Прямоугольники кажутся повернутыми (транспонированными), и я хочу повернуть их на 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