Автор оригинала: Pankaj Kumar.
Мы почти закончили с основы, это будет последняя статья, и мы поговорим о трансформации изображений.
Если вы не прочитали наши предыдущие статьи в серии обработки изображений, вы можете щелкнуть ссылки ниже:
- Часть 1 – Загрузка изображений в OpenCV
- Часть 2 – Настройка пикселей с Python Opencv
- Часть 3 – Рисование с Python Opencv
В этой статье мы будем обсуждать различные методы для изменения изображений с использованием таких концепций, как перевод, вращение, изменение размера, переворачивания и обрезки.
Давайте не будем тратить время и не направиться в него!
Начало работы с изображением трансформации
Все следующие программы состоят из модулей, которые будут импортированы, и также будут принимать аргументы изображения.
Это будет, как таковой, будет обсуждаться здесь, прежде чем мы перейдем к фактической концепции.
Во-первых, мы импортируем модули, используемые при преобразовании изображения,
# importing the numpy module to work with pixels in images import numpy as np # importing argument parsers import argparse # importing the OpenCV module import cv2
Далее мы настроим анализаторы аргументов, чтобы мы могли принять вход от пользователя относительно местоположения файла изображения.
# initializing an argument parser object
ap = argparse.ArgumentParser()
# adding the argument, providing the user an option
# to input the path of the image
ap.add_argument("-i", "--image", required=True, help="Path to the image")
# parsing the argument
args = vars(ap.parse_args())
Теперь давайте вступим в ядро преобразований!
Перевод в openc.
Работа с переводом в OpenCV, мы сначала определим функцию, которая принимает входное изображение, и сдвиг как осях X, так и Y.
Warpaffine Метод принимает как в входном изображении, а также матрицу перевода и обозначает изображение в процессе перевода.
Затем мы, наконец, верните измененное изображение обратно в программу.
# defining a function for translation
def translate(image, x, y):
# defining the translation matrix
M = np.float32([[1, 0, x], [0, 1, y]])
# the cv2.warpAffine method does the actual translation
# containing the input image and the translation matrix
shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
# we then return the image
return shifted
Теперь у нас есть код, ответственный за использование ввода и предоставления вывода. Функция Translate предоставляет нам простой прямой вызов процессу.
# reads the image from image location
image = cv2.imread(args["image"])
cv2.imshow("Original", image)
# call the translation function to translate the image
shifted = translate(image, 0, 100)
cv2.imshow("Shifted Down", shifted)
cv2.waitKey(0)
Вы должны получать изображение сдвинутым на 100 пикселей наряду с оригинальным.
Ротация изображения с Python Opencv
Давайте сначала определим функцию для вращения, это позволяет использовать одну строку кода, чтобы повернуть наше изображение позже.
Функция вращения принимает изображение, угол, который мы должны повернуть изображение, и мы также объявим несколько по умолчанию для центра и масштабирования.
cv2.getrotationmatrix2d Позволяет нам создать матрицу, которая при деформации предоставляет нам повернутое изображение.
Затем мы возвращаем повернутое изображение.
# defining a function for rotation
def rotate(image, angle, center=None, scale=1.0):
(h, w) = image.shape[:2]
if center is None:
center = (w / 2, h / 2)
# the cv2.getRotationMatrix2D allows us to create a
# Rotation matrix
M = cv2.getRotationMatrix2D(center, angle, scale)
# the warpAffine function allows us to rotate the image
# using the rotation matrix
rotated = cv2.warpAffine(image, M, (w, h))
return rotated
Теперь давайте проверим функцию, предоставив разные углы для наших изображений, от 45 до 90 до 180!
# rotating the image by 45 degrees
rotated = rotate(image, 45)
cv2.imshow("Rotated by 45 Degrees", rotated)
# rotating the image by 90 degrees
rotated = rotate(image, 90)
cv2.imshow("Rotated by -90 Degrees", rotated)
# rotating the image by 180 degrees
rotated = rotate(image, 180)
cv2.imshow("Rotated by 180 degrees", rotated)
Пока мы не написали функцию, которая включает в себя смещения в нее, она намного одинакова.
Более процедурный подход к работе со смещениями, дается ниже,
# working with offsets in images
# then, rotating 45 degrees
(h, w) = image.shape[:2]
(cX, cY) = (w / 2, h / 2)
M = cv2.getRotationMatrix2D((cX - 50, cY - 50), 45, 1.0)
rotated = cv2.warpAffine(image, M, (w, h))
cv2.imshow("Rotated by Offset & 45 Degrees", rotated)
# used to wait for user input before closing the images
cv2.waitKey(0)
Вверх ногами, opencv и переворачивание
Переверните в OpenCV довольно просты, с простым Flip () функция.
CV2.FLIP Функция принимает в двух аргументах, один из которых является сам изображение, а другой означает, как перевернуть изображение.
| 0 | Вертикальный флип |
| 1 | Горизонтальный флип |
| -1 | Вертикальный и горизонтальный флип |
Вот код, чтобы перевернуть изображение,
# flipping the image horizontally
flipped = cv2.flip(image, 1)
cv2.imshow("Flipped Horizontally", flipped)
# flipping the image vertically
flipped = cv2.flip(image, 0)
cv2.imshow("Flipped Vertically", flipped)
# flipping the image vertically and horizontally
flipped = cv2.flip(image, -1)
cv2.imshow("Flipped Vertically and Horizontally", flipped)
# wait for the user's key to proceed
cv2.waitKey(0)
Часть меня вы никогда не увидите: обрезки
Обрезка изображения в CV2 так же просто, как доступ к спискам в Python.
Нет никаких функций для этого, так как не нужно быть одной.
Код для урожая,
# displaying the width and height of the image
print("Width", image.shape[1])
print("Height", image.shape[0])
# cropping the image manually
face = image[:400, :600]
cv2.imshow("Face", face)
cv2.waitKey(0)
# cropping the image manually
body = image[400:600, 120:600]
cv2.imshow("Body", body)
cv2.waitKey(0)
Пакет Imutils
Хорошая идея решить использование большого количества кода в ваших программах, – это работать с Имутилс Модуль, который по своей природе предоставляет методы преобразования изображений.
Мы также можем включать в себя наши собственные изготовленные преобразования в модуле и могут использовать его в любом месте с помощью простого оператора импорта!
Заключение
Преобразование изображения отмечает конец основных операций, которые не изменяют свойства изображений большими.
Мы будем продолжать работать над кодом OPENCV, который входит в основы обработки изображений сейчас.
Основы превышают, но это не значит, что мы идут в продвинутые темы.
Вот посмотрите на некоторые будущие работы, если вы хотите увидеть, что вы можете иметь дело с 😉
Вот opencv и распознавание лица для дальнейшего чтения!