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

Давайте разберемся, к чему на самом деле приведет эта функция.

  1. На первом этапе мы считываем изображение либо в градациях серого, либо в RGB и получаем матрицу изображения.
  2. Мы получаем высоту и ширину изображения, которые в дальнейшем используются при проверке кода.
  3. Убедитесь, что длина и ширина являются положительными целыми числами. Поэтому учитываются абсолютные значения.
  4. Мы вычисляем четыре важных значения, которые полезны для нарезки матрицы — start_row, end_row, start_column, end_column. Мы получаем это, используя три переданных аргумента — start_pos, length, width. .
  5. Мы получаем обрезанное изображение, разрезая матрицу.
  6. Мы наносим исходные и обрезанные изображения для визуализации.

Давайте проверим вышеуказанную функцию —

Для изображения 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

Это оно!!! Наконец-то мы можем обрезать изображение, просто зная начальную позицию, длину и ширину обрезанного изображения. Разве это не здорово? Мы также можем добавить множество параметров настройки, таких как добавление рамки вокруг изображения и другие вещи. Чтобы узнать, как добавить рамку к изображению, вы можете обратиться к моей статье.

Другие подобные статьи можно найти в моем профиле. Желаем приятно провести время, читая и внедряя то же самое.

Если вам понравилось, вы можете купить мне кофе здесь.