Чтобы изменить размер изображения в Python, вы можете использовать функцию cv2.resize() библиотеки OpenCV cv2.
При изменении размера по умолчанию изменяется только ширина и высота изображения. Соотношение сторон может быть сохранено или нет, в зависимости от требований. Соотношение сторон можно сохранить, вычислив ширину или высоту для заданной высоты или ширины цели соответственно.

Синтаксис
Ниже приводится синтаксис функции cv2.resize().
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
Где:
- src – это исходное, исходное или входное изображение в виде массива numpy;
- dsize – желаемый размер выходного изображения, заданный как кортеж;
- fx – коэффициент масштабирования по оси X или по горизонтальной оси;
- fy – коэффициент масштабирования по оси Y или вертикальной оси;
- Интерполяция может быть одним из следующих значений:
- INTER_NEAREST
- INTER_LINEAR
- ИНТЕР_ЗОНА
- INTER_CUBIC
- INTER_LANCZOS4
- В зависимости от выбранной техники интерполяции используется соответствующий алгоритм. Вы можете рассматривать интерполяцию как метод, который решает, какой пиксель получает значение на основе соседних пикселей и масштаба, в котором изменяется размер изображения.
Как изменить размер изображения?
Вы можете изменить размер изображения тремя способами:
- Сохраните соотношение сторон и увеличьте или уменьшите ширину и высоту изображения. Чтобы прояснить ситуацию, Aspect Ratio – это отношение ширины изображения к высоте.
- Масштабируйте изображение только по оси X или по горизонтали. То есть изменить ширину, сохраняя высоту такой же, как у исходного изображения.
- Масштабируйте изображение только по оси Y или вертикальной оси. То есть изменить высоту, сохраняя ширину такой же, как у исходного изображения.
Рассмотрим следующее изображение. Мы будем использовать это изображение в качестве входного или исходного изображения в наших текущих программах-примерах.

Пример 1
В следующем примере мы увидим, как можно изменить размер изображения выше с помощью cv2.resize(), сохранив при этом соотношение сторон. Мы изменим размер изображения до 50% от его фактической формы, т.е. уменьшим его высоту до 50% от оригинала и ширину до 50% от оригинала.
import cv2
src = cv2.imread('D:/cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)
#percent by which the image is resized
scale_percent = 50
#calculate the 50 percent of original dimensions
width = int(src.shape[1] * scale_percent / 100)
height = int(src.shape[0] * scale_percent / 100)
# dsize
dsize = (width, height)
# resize image
output = cv2.resize(src, dsize)
cv2.imwrite('D:/cv2-resize-image-50.png',output)
Что мы сделали в указанной выше программе Python:
- cv2.imread() считал указанный файл в cv2.IMREAD_UNCHANGED с каналом прозрачности (если есть) и вернул массив numpy со значениями пикселей.
- Для scale_percent установлено значение 50. Мы собираемся масштабировать изображение до 50% от его исходных размеров, как по ширине, так и по высоте.
- src.shape [1] дает ширину исходного изображения. int (src.shape [1] * scale_percent / 100) вычисляет 50% исходной ширины. Аналогичным образом рассчитывается и высота.
- Затем мы устанавливаем желаемый размер dsize с вновь вычисленными шириной и высотой.
- cv2.resize изменяет размер изображения src до размера dsize и возвращает массив numpy.
- Используя cv2.imwrite, мы записываем вывод cv2.resize в локальный файл изображения.

Пример 2
В следующем примере мы будем масштабировать изображение только по оси x или по горизонтальной оси. И высоту изображения оставляем неизменной.
В dsize мы сохраним высоту исходного изображения, но изменим ширину.
import cv2
src = cv2.imread('D:/cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)
# set a new width in pixels
new_width = 300
# dsize
dsize = (new_width, src.shape[0])
# resize image
output = cv2.resize(src, dsize, interpolation = cv2.INTER_AREA)
cv2.imwrite('D:/cv2-resize-image-width.png',output)

Как изменить размер по вертикали?
В следующем примере мы будем масштабировать изображение только по оси Y или Вертикальной оси. Ширина выходного изображения не отличается от ширины исходного изображения.
В dsize мы сохраним ширину исходного изображения, но изменим высоту.
import cv2
src = cv2.imread('D:/cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)
# set a new height in pixels
new_height = 200
# dsize
dsize = (src.shape[1], new_height)
# resize image
output = cv2.resize(src, dsize, interpolation = cv2.INTER_AREA)
cv2.imwrite('D:/cv2-resize-image-height.png',output)

В этом руководстве на примерах Python мы узнали, как использовать функцию OpenCV cv2.resize(), чтобы изменять размер изображения по ширине, высоте или по обоим параметрам, сохраняя или не сохраняя соотношение сторон.