Автор оригинала: 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 и распознавание лица для дальнейшего чтения!