Работа с видео в Python OpenCV
В библиотеке OpenCV для Python работа с видео может проходить либо путем обработки видеофайлов из файловой системы, либо же путем обработки потокового видео, например, с Web-камеры. Для работы с видео из файловой системы необходимо поместить видео файл в директорию общую с файлом нашего кода. Вариант для Web камеры подразумевает простое указание индекса камеры, здесь это - 0, если же на ПК установлено несколько камер, то указываем 1, и так далее. При этом за один раз можно использовать только один из вариантов.
import cv2 # Импорт модуля OpenCV
cap = cv2.VideoCapture(0); # Видео вывод с веб камеры компьютера, при включенной камере
cap = cv2.VideoCapture("VIDEO0102.mp4"); # Вывод с видео файла
print(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # Вывод в консоли размера нашего окна.
cap.set(3,1280) # Установление длины окна
cap.set(4,700) # Ширина окна
print(cap.get(3))
print(cap.get(4))
Объект cap будет содержать метод read, который возвращает два параметра ret и frame. Первый параметр есть булево значение и принимает 1 или 0. Для нас интерес представляет второй параметр frame. Он содержит данные в виде массива кадров. Можно вывести их на экран.
while(True): # Вывод кадров производится в цикле
ret, frame = cap.read()
frame = cv2.rectangle(frame,(384,0),(510,128),(0,0,255),10) # добавление к видео выводу объекта прямоугольника
print(frame) # Вывод массива в консоль
cv2.imshow("frame",frame) # Метод для визуализации массива кадров
cap.release()
cv2.destroyAllWindows()
В Python модуле cv2 есть множество интересных инструментов для работы, среди них, например, фильтры. Их множество, но мы рассмотрим всего несколько. Мы будем использовать Гауссовский фильтр и фильтр Canny, который будет выдавать черно-белые кадры в виде белых контуров и черных областей. Перейдем к коду:
while(True):
ret, frame = cap.read()
frame = cv2.rectangle(frame,(384,0),(510,128),(0,0,255),10)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Перевод массива кадров в черно-белую градацию
edges = cv2.Canny(gray, 1, 50) # Нахождение контуров
cv2.imshow("edges",edges) # обработанный вариант
print(frame)
cv2.imshow("frame", frame) # оригинальный вариант
cap.release()
cv2.destroyAllWindows()
Смотря на обработанное видео можно заметить большое количество контуров или шумов, мешающим правильно распознать образ нашего изначального варианта. Их необходимо устранить. Используем для этого гауссовский фильтр:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 1.5) # Параметры позволяют регулировать шумность
edges = cv2.Canny(gray, 1, 50) # Нахождение контуров
cv2.imshow("edges",edges) # вывод на экран
Логика здесь следующая объект frame передается в метод модуля cv2 GaussianBlur, из которого создается другой объект gray, передающийся в метод Canny. Т.е. сначала черно-белый массив фильтруется от шумов, а затем создается его контурная модель, которая выводится на экран методом cv2.imshow("edges",edges). Возникает вопрос для чего все это нужно, если говорить коротко, то данные операции являются этапами в детектировании различных объектов и их распознавании.
На этом все, спасибо за внимание!
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.