Изменение размера изображения OpenCV cv2 в Python

Чтобы изменить размер изображения в 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
  • В зависимости от выбранной техники интерполяции используется соответствующий алгоритм. Вы можете рассматривать интерполяцию как метод, который решает, какой пиксель получает значение на основе соседних пикселей и масштаба, в котором изменяется размер изображения.

Как изменить размер изображения?

Вы можете изменить размер изображения тремя способами:

  1. Сохраните соотношение сторон и увеличьте или уменьшите ширину и высоту изображения. Чтобы прояснить ситуацию, Aspect Ratio – это отношение ширины изображения к высоте.
  2. Масштабируйте изображение только по оси X или по горизонтали. То есть изменить ширину, сохраняя высоту такой же, как у исходного изображения.
  3. Масштабируйте изображение только по оси 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:

  1. cv2.imread() считал указанный файл в cv2.IMREAD_UNCHANGED с каналом прозрачности (если есть) и вернул массив numpy со значениями пикселей.
  2. Для scale_percent установлено значение 50. Мы собираемся масштабировать изображение до 50% от его исходных размеров, как по ширине, так и по высоте.
  3. src.shape [1] дает ширину исходного изображения. int (src.shape [1] * scale_percent / 100) вычисляет 50% исходной ширины. Аналогичным образом рассчитывается и высота.
  4. Затем мы устанавливаем желаемый размер dsize с вновь вычисленными шириной и высотой.
  5. cv2.resize изменяет размер изображения src до размера dsize и возвращает массив numpy.
  6. Используя cv2.imwrite, мы записываем вывод cv2.resize в локальный файл изображения.

Выходное изображение Python OpenCV cv2

Пример 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(), чтобы изменять размер изображения по ширине, высоте или по обоим параметрам, сохраняя или не сохраняя соотношение сторон.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *