В этой статье блога мы узнаем, как обрезать изображение в Python, используя NumPy в качестве идеальной библиотеки. Когда мы говорим об изображениях, это просто матрицы в двумерном пространстве. И, конечно, это зависит от изображения, если это изображение RGB, то размер изображения будет (ширина, высота, 3), иначе — оттенки серого будут просто (ширина, высота). Но в конечном итоге изображения — это просто большие матрицы, где каждое значение — это пиксель, расположенный по строкам и по столбцам соответственно.
Обрезка изображения — это просто получение подматрицы матрицы изображения. Размер подматрицы (обрезанного изображения) может быть выбран по нашему выбору, в основном это высота и ширина. Чтобы изображение было обрезано, должна быть одна важная вещь, т. е. начальная позиция. Начальная позиция полезна для получения подматрицы из этой позиции, и в зависимости от высоты и ширины мы можем легко обрезать изображение.
Три важные вещи:
- Начальная позиция
- длина высота)
- ширина
Основываясь на этих трех вещах, мы можем построить полностью готовую функцию кадрирования.
Время кодировать
Пакеты, которые мы в основном используем:
- NumPy
- Матплотлиб
- OpenCV → Используется только для чтения изображения.
Импорт пакетов
Прочитайте изображение
Приведенная выше функция считывает изображение в оттенках серого или RGB и возвращает матрицу изображения.
Обрезка изображения
Нам нужно передать вышеупомянутые 3 вещи в качестве аргументов в нашу функцию. Но перед этим попробуем обрезать (нарезать) матрицу с помощью NumPy.
>>> import numpy as np >>> m = np.array([ ... [1, 2, 3, 4, 5, 6, 7], ... [5, 3, 4, 2, 1, 7, 6], ... [6, 4, 3, 5, 1, 2, 7], ... [5, 6, 3, 1, 4, 2, 7], ... [1, 2, 3, 4, 5, 6, 7] ... ]) >>> >>> print(m) [[1 2 3 4 5 6 7] [5 3 4 2 1 7 6] [6 4 3 5 1 2 7] [5 6 3 1 4 2 7] [1 2 3 4 5 6 7]] >>> >>> crop_m = m[1:4, 2:7] >>> print(crop_m) [[4 2 1 7 6] [3 5 1 2 7] [3 1 4 2 7]] >>>
Приведенный выше код является примером того, как мы можем обрезать матрицу изображения. Обратите внимание, что crop_m — это обрезанная матрица (субматрица), нарезанная из исходной матрицы m. Подматрица crop_m принимает значения из [1:4, 2:7], т. е. значения от 1-й строки до 4-й строки и от 2-го столбца до 7-го столбца. Мы должны что-то подобное для изображения, чтобы получить обрезанное изображение. Давайте напишем функцию обрезки изображения.
Давайте разберемся, к чему на самом деле приведет эта функция.
- На первом этапе мы считываем изображение либо в градациях серого, либо в RGB и получаем матрицу изображения.
- Мы получаем высоту и ширину изображения, которые в дальнейшем используются при проверке кода.
- Убедитесь, что длина и ширина являются положительными целыми числами. Поэтому учитываются абсолютные значения.
- Мы вычисляем четыре важных значения, которые полезны для нарезки матрицы — start_row, end_row, start_column, end_column. Мы получаем это, используя три переданных аргумента — start_pos, length, width. .
- Мы получаем обрезанное изображение, разрезая матрицу.
- Мы наносим исходные и обрезанные изображения для визуализации.
Давайте проверим вышеуказанную функцию —
Для изображения RGB
start row - 199 end row - 299 start column - 199 end column - 399
Для изображения в градациях серого
start row - 199 end row - 299 start column - 199 end column - 399
Это оно!!! Наконец-то мы можем обрезать изображение, просто зная начальную позицию, длину и ширину обрезанного изображения. Разве это не здорово? Мы также можем добавить множество параметров настройки, таких как добавление рамки вокруг изображения и другие вещи. Чтобы узнать, как добавить рамку к изображению, вы можете обратиться к моей статье.
Другие подобные статьи можно найти в моем профиле. Желаем приятно провести время, читая и внедряя то же самое.
Если вам понравилось, вы можете купить мне кофе здесь.