У меня есть простой файл изображения, как показано ниже, где я определил набор координат, которые я хочу обрезать.
Выбор обрезки происходит на внешнем интерфейсе , что означает, чтоизображение, которое видит пользователь, уменьшено до размера экрана пользователя.Ниже приведена информация об изображении:
imageWidth: 965
imageHeight: 1365.46875
Исходя из вышеуказанной ширины и высоты, координаты прямоугольника, который вы видите на изображении:
"x":405.5,
"y":130,
"height":36
"width":129
(Все цифрыв пикселях)
В моем бэкенде, в моем коде 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не уверен, что я делаю не так?
Редактировать:
Исходное изображение можно найти здесь .