Обрезка изображения по координатам (с учетом масштабного коэффициента) - PullRequest
1 голос
/ 22 сентября 2019

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

Выбор обрезки происходит на внешнем интерфейсе , что означает, чтоизображение, которое видит пользователь, уменьшено до размера экрана пользователя.Ниже приведена информация об изображении:

imageWidth: 965
imageHeight: 1365.46875

Исходя из вышеуказанной ширины и высоты, координаты прямоугольника, который вы видите на изображении:

"x":405.5,
"y":130,
"height":36
"width":129

(Все цифрыв пикселях)

Image I want to crop

В моем бэкенде, в моем коде Python, я хочу убедиться, что обрезаю то же, что и пользователи.Поэтому я решил, что мне нужно рассчитать коэффициент масштабирования x, y:

import numpy as np
import cv2

#Open the original image and get widht/height
image = cv2.imread(image_file)
height, width = image.shape[0:2]

Высота и ширина исходного изображения: H: 3508, W: 2479

Затем я вычислю коэффициенты масштабирования:

# Set scaling factors
scalingFactorX = width / imageWidth
scalingFactorY = height / imageHeight

Что равно: Scaling X: 2.5689119170984456, Scaling Y: 2.569081130564138

После вычисления коэффициентов масштабирования я преобразовываю исходные координаты в масштаб соответственно:

crop_x = scalingFactorX * box['x']
crop_y = scalingFactorY * box['y']
crop_w = scalingFactorX * box['width']
crop_h = scalingFactorY * box['height']

И, наконец, я обрезаюизображение и сохраните его:

crop = image[int(crop_y):int(crop_y)+int(crop_h),
             int(crop_x): int(crop_x) + int(crop_w)]
cv2.imwrite("cropped_image.png", crop)

Однако область обрезки не правильная.Это просто пустое изображение (я думаю, что координаты далеко, что означает, что в конечном итоге он обрезает другую часть страницы):

В результате получается пустое изображение размером 331 x 92 пикселя.

Iне уверен, что я делаю не так?

Редактировать:

Исходное изображение можно найти здесь .

...