Описание задания

  • Создайте изображение самостоятельно, используя код Python.
  • Возьмите 2 изображения, обрежьте часть обоих изображений и поменяйте их местами.
  • Возьмите 2 изображения и объедините их в одно изображение. Например коллаж.

Сначала мы рассмотрим различные детали обработки изображений и библиотеки OpenCV в python.

Что такое обработка изображений?

В компьютерном мире изображения - это многомерные массивы. 2D-массивы для черно-белых изображений и 3D-массивы для RGB.

Цветные изображения хранятся в виде трехмерных (3D) массивов в компьютере, где хранятся только значения 0–255, кроме того, 0 и 255 представляют черный и белый цвет соответственно.

Обработка изображений занимается обработкой цифровых изображений с помощью цифрового компьютера. Обработка изображений фокусируется на разработке компьютерной системы, способной выполнять обработку изображения. Входом этой системы является цифровое изображение, и система обрабатывает это изображение с помощью эффективных алгоритмов и выдает изображение на выходе.

Пиксель - наименьшая единица изображения. Технически это запись внутри массива в определенной позиции строки и столбца. Каждый пиксель состоит из трех цветов: красного, зеленого и синего. При объединении образуются разные цвета. Несколько пикселей вместе образуют полное изображение.

Обработка видео означает покадровое выполнение операций с видео. Кадры - это не что иное, как конкретный экземпляр видео, то есть изображение в определенный момент времени. У нас может быть несколько кадров даже за одну секунду. Видео - это не что иное, как непрерывный поток изображений. Повторяющийся цикл захвата изображения и его отображения дает видео, которое также можно обработать внутри цикла для получения обработанного видео.

Python предоставляет множество библиотек для обработки изображений, в том числе -

  • OpenCV - библиотека обработки изображений, в основном ориентированная на компьютерное зрение в реальном времени с применением в широком спектре областей, таких как наборы инструментов 2D и 3D, распознавание лиц и жестов, взаимодействие человека с компьютером, мобильная робототехника, идентификация объектов. и другие.
  • Библиотеки Numpy и Scipy - для обработки и обработки изображений.
  • Sckikit - предоставляет множество алогрифмов для обработки изображений.
  • Библиотека изображений Python (PIL) - для выполнения основных операций с изображениями, таких как создание миниатюр, изменение размера, поворот, преобразование между различными форматами файлов и т. д.

Здесь мы будем использовать модуль OpenCV.

  • OpenCV - одна из самых популярных библиотек компьютерного зрения. Если вы хотите начать свой путь в области компьютерного зрения, глубокое понимание концепций OpenCV имеет первостепенное значение.
  • OpenCV - огромная библиотека с открытым исходным кодом для компьютерного зрения, машинного обучения и обработки изображений. OpenCV поддерживает широкий спектр языков программирования, таких как Python, C ++, Java и т. Д. Он может обрабатывать изображения и видео для идентификации объектов, лиц или даже почерка человека. Когда он интегрирован с различными библиотеками, такими как Numpy, которая является высоко оптимизированной библиотекой для числовых операций, тогда количество оружия увеличивается в вашем арсенале, то есть любые операции, которые можно выполнять в Numpy, можно комбинировать с OpenCV.
  • Общий цветовой код - RGB, но формат цветового кода, используемый в OpenCV, - BGR (синий, зеленый, красный).

Установить OpenCV

Чтобы установить OpenCV в вашей системе, выполните следующую команду pip:

pip install opencv-python

Повернуть изображение

Прежде всего, импортируйте модуль cv2.

import cv2

Теперь, чтобы прочитать изображение, используйте метод imread () модуля cv2, укажите путь к изображению в аргументах и ​​сохраните изображение в переменной, как показано ниже:

img = cv2.imread("pyimg.jpg")

Изображение теперь обрабатывается как матрица со значениями строк и столбцов, хранящимися в img.

Фактически, если вы проверите тип img, он даст вам следующий результат:

>>>print(type(img))
<class 'numpy.ndarray'>

Это массив NumPy! Вот почему обработка изображений с помощью OpenCV так проста. Все время вы работаете с массивом NumPy.

Чтобы отобразить изображение, вы можете использовать метод imshow () для cv2.

cv2.imshow('Original Image', img) 
cv2.waitKey(0)

Функции waitkey () принимают время в качестве аргумента в миллисекундах в качестве задержки для закрытия окна. Здесь мы устанавливаем время равным нулю, чтобы окно отображалось вечно, пока мы не закроем его вручную.

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

height, width = img.shape[0:2]

Атрибут shape возвращает высоту и ширину матрицы изображения. Если вы распечатаете

img.shape[0:2]

Хорошо, теперь у нас есть матрица изображений, и мы хотим получить матрицу вращения. Чтобы получить матрицу вращения, мы используем метод getRotationMatrix2D () для cv2. Синтаксис getRotationMatrix2D ():

cv2.getRotationMatrix2D(center, angle, scale)

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

Чтобы получить матрицу поворота нашего изображения, код будет:

rotationMatrix = cv2.getRotationMatrix2D((width/2, height/2), 90, .5)

Следующим шагом будет поворот нашего изображения с помощью матрицы вращения.

Чтобы повернуть изображение, у нас есть метод cv2 с именем wrapAffine, который принимает исходное изображение, матрицу поворота изображения, а также ширину и высоту изображения в качестве аргументов.

rotatedImage = cv2.warpAffine(img, rotationMatrix, (width, height))

Повернутое изображение сохраняется в матрице rotatedImage. Чтобы показать изображение, используйте imshow (), как показано ниже:

cv2.imshow('Rotated Image', rotatedImage)
cv2.waitKey(0)

Захват изображения с помощью веб-камеры:

import cv2 
cap = cv2.VideoCapture(0) # here, 0 — to access internal webcam & 1 to access external webcam 
ret , photo = cap.read() # clicks the photo
ret 
cv2.imwrite(“my”,photo) # stores in a file
cap.release() 
cv2.imshow(“my”, photo) # displays the photo
cv2.waitKey() # used to set the expiry time for the picture to be displayed
cv2.destroyAllWindows() #used to destroy or close the picture window without crashing it

Потоковое видео с помощью веб-камеры:

import cv2
cap = cv2.VideoCapture(0)
ret, photo = cap.read()
while True:
 ret, photo = cap.read()
 cv2.imshow('hi', photo)
 if cv2.waitKey(10) ==13:
  break
cv.destroyAllwindows()

Преобразование изображения в оттенки серого (черно-белое)

Самый простой способ преобразовать изображение в оттенки серого - загрузить его следующим образом:

img = cv2.imread("pyimg.jpg", 0)

Есть еще один метод с использованием BGR2GRAY.

Чтобы преобразовать цветное изображение в изображение в оттенках серого, используйте атрибут BGR2GRAY модуля cv2. Это продемонстрировано в следующем примере:

Импортируйте модуль cv2:

import cv2

Прочтите изображение:

img = cv2.imread("pyimg.jpg")

Используйте метод cvtColor () модуля cv2, который принимает исходное изображение и атрибут COLOR_BGR2GRAY в качестве аргумента. Сохраните полученное изображение в переменной:

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Отобразите исходное изображение и изображение в градациях серого:

cv2.imshow("Original Image", img)
cv2.imshow("Gray Scale Image", gray_img)
cv2.waitKey(0)

Изменить размер изображения

Чтобы изменить размер изображения, вы можете использовать метод resize () openCV. В методе изменения размера вы можете указать значения осей x и y или количество строк и столбцов, которые указывают размер изображения.

Импортируйте и прочтите изображение:

import cv2
img = cv2.imread("pyimg.jpg")

Теперь, используя метод изменения размера со значениями оси:

newImg = cv2.resize(img, (0,0), fx=0.75, fy=0.75)
cv2.imshow('Resized Image', newImg)
cv2.waitKey(0)

Теперь, используя значения строки и столбца, чтобы изменить размер изображения:

newImg = cv2.resize(img, (550, 350))
cv2.imshow('Resized Image', newImg)
cv2.waitKey(0)

Мы говорим, что хотим 550 столбцов (ширина) и 350 строк (высота).

Создание изображения с использованием кода Python

Результат выглядит следующим образом:

Возьмите 2 изображения, обрежьте часть обоих изображений и поменяйте их местами.

Результат:

Возьмите 2 изображения и объедините их в одно изображение. Например коллаж.

Выход:

Больше контента на plainenglish.io