Описание задания
- Создайте изображение самостоятельно, используя код 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