Рубрики
Без рубрики

Часть 4 серии обработки изображений: преобразование изображения

Мы почти закончили с основы, это будет последняя статья, и мы поговорим о трансформации изображений. Если вы еще не читали через наш предыдущий

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

Рекомендации