Как преобразовать координаты измененного изображения в координату исходного изображения?

#python #python-3.x #image #opencv #image-processing

#python #python-3.x #изображение #opencv #обработка изображений

Вопрос:

Я создаю программу обрезки изображений на python с использованием opencv. Я выбираю координаты 4 точек раздела для обрезки по щелчку мыши. Проблема в том, что я изменяю размер изображения, чтобы отобразить его на экране, например (800×600), и я не могу использовать эти точки для обрезки исходного изображения.

Как я могу преобразовать эти координаты, чтобы я мог обрезать изображение с большим разрешением, но показывать их измененными??

Например. — если изображение 1920х1080, оно займет весь экран, поэтому я изменяю его размер до 1067×600, а затем беру точки, чтобы обрезать его, но тогда обрезанное изображение будет измененным, а не оригинальным с высоким разрешением. как преобразовать координату типа (234 455) в координату изображения без изменения размера?

Комментарии:

1. Возможно, вы захотите показать некоторый код о том, как вы отображаете, а также сообщить нам, каково ваше текущее разрешение экрана

2. Разве это не должно быть простым вопросом перевода и масштабирования точек?

Ответ №1:

Вы можете справиться с этим с помощью процентов. В принципе, сохраняя соотношение сторон изображения, измените его на меньший размер.

 def resize_to_max_dimension(image,max_dimension):
    image_height,image_width,channels = image.shape


    if image_height < max_dimension and image_width < max_dimension: ##Only resize larger images
        return image


    if image_height > image_width:
        final_height = max_dimension
        final_width = int(final_height *  image_width / image_height )
    else:
        if not image_width == 0:
            final_width = max_dimension
            final_height = int(final_width *  image_height / image_width)
        else:
            final_height = 0
            final_width = 0


    return cv2.resize(image,(int(final_width),int(final_height)))
  

Теперь, после изменения размера, скажем, до 800 x 600, при обрезке вычислите процент от верхних сторон.
В основном, x_min_percentage, y_min_percentage, x_max_percentage, y_max_percentage
Итак, если x min слева было 200, а ширина 800, у вас будет 25% в качестве x_min_percentage.

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

 image_height,image_width,channels = original_image.shape
crop_x_min = image_width * x_min_percentage
crop_y_min = image_height * y_min_percentage
crop_x_max = image_width * x_max_percentage
crop_y_max = image_height * y_max_percentage