Центральная обрезка
Обрезка по центру — это обрезка изображения от центра, что дает равные отступы с обеих сторон по вертикали и горизонтали. Это полезно при работе с множеством изображений с разным разрешением, например, для приложений компьютерного зрения или машинного обучения.
Я работал над веб-камерой и пи-камерой с разным разрешением. Поэтому я создал функцию обрезки от центра до максимального размера без превышения доступного размера исходного изображения.
import cv2
Импорт библиотеки OpenCV как обычно.
def center_crop(img, dim): """Returns center cropped image Args:Image Scaling img: image to be center cropped dim: dimensions (width, height) to be cropped from center """
Давайте создадим функцию center_crop() с параметрами в виде изображения и размерами обрезки в виде кортежа (ширина, высота).
width, height = img.shape[1], img.shape[0] #process crop width and height for max available dimension crop_width = dim[0] if dim[0]<img.shape[1] else img.shape[1] crop_height = dim[1] if dim[1]<img.shape[0] else img.shape[0]
Первая строка получает ширину и высоту исходного изображения. Размеры обрезки, переданные в аргументах, могут превышать исходный размер, что приводит к неправильной обрезке изображения. Последние две строки выбирают максимальный размер без превышения исходного размера изображения.
mid_x, mid_y = int(width/2), int(height/2) cw2, ch2 = int(crop_width/2), int(crop_height/2) crop_img = img[mid_y-ch2:mid_y+ch2, mid_x-cw2:mid_x+cw2] return crop_img
Первые две строки получат координаты, необходимые для нарезки массива numpy, т.е. массива изображений.
Изображение RGB, прочитанное в OpenCV, будет иметь форму: (высота, ширина, канал). Пример: (920, 1280, 3).
Срезы третьей строки из исходного массива изображений, которые становятся массивом обрезанных изображений. Наконец, возвращает обрезанное по центру изображение.
Масштабирование изображения
Масштабирование изображения — это изменение размера путем сохранения пропорций изображения, т. е. уменьшение и увеличение масштаба.
def scale_image(img, factor=1): """Returns resize image by scale factor. This helps to retain resolution ratio while resizing. Args: img: image to be scaled factor: scale factor to resize """
Определим функцию scale_image() с параметрами image и коэффициентом масштабирования.
return cv2.resize(img, (int(img.shape[1]*factor),int(img.shape[0]*factor)))
Мы будем использовать функцию изменения размера для масштабирования изображения путем умножения коэффициента масштабирования на исходный размер изображения и возврата масштабированного изображения.
Уменьшение масштаба можно выполнить, передав аргумент фактора от 0 до 1. И выше 1 для увеличения масштаба.