#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