Базовые операции с видео в OpenCV
Мы уже разбирали базовые операции с изображениями в OpenCV. В уроке рассмотрим операции с видео: изменение размера видео, вырезание фрагмента, поворот и сохранение. Создадим ползунок для видео.
Изменение размера видео
Для начала нам нужно открыть видео в пространстве OpenCV.
Чтобы изменить размер видео, используем команду cv2.resize(). Напишем код:
import cv2
file = "MH.mp4" # путь к файлу с картинкой
percent = 20
cap = cv2.VideoCapture(file)
while(cap.isOpened()):
ret,frame = cap.read()
width = int(frame.shape[1] * percent / 100)
height = int(frame.shape[0] * percent / 100)
dim = (width, height)
frame_re = cv2.resize(frame, dim)
cv2.imshow('frame',frame_re)
if cv2.waitKey(33) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
В результате получаем маленькое видео:
Вырезание фрагмента
Вырежем по высоте с 60 по 500 пиксели, а по ширине — с 200 по 400:
import cv2
file = "MH.mp4" # путь к файлу с картинкой
cap = cv2.VideoCapture(file)
while(cap.isOpened()):
ret,frame = cap.read()
frame_re = frame[60:500, 200:400]
cv2.imshow('frame',frame_re)
if cv2.waitKey(33) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
В итоге получаем:
Поворот
Поворот изображения осуществляется следующим образом:
img = cv2.rotate(img,rotateCode)
Разберем эту функцию. img — изображение, которое необходимо повернуть. rotateCode — код поворота, который может принимать следующие значения:
- cv2.ROTATE_90_CLOCKWISE — поворот на 90 градусов по часовой стрелке
- cv2.ROTATE_90_COUNTERCLOCKWISE — поворот на 90 градусов против часовой стрелки
- cv2.ROTATE_180 — поворот на 180 градусов
Общий вид кода:
import cv2
file = "MH.mp4" # путь к файлу с картинкой
cap = cv2.VideoCapture(file)
while(cap.isOpened()):
ret,frame = cap.read()
frame_re = cv2.rotate(frame , cv2.ROTATE_180)
cv2.imshow('frame',frame_re)
if cv2.waitKey(33) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Выводим результат:
Сохранение
Для сохранения видеофрагмента необходимо создать объект для записи видео:
video_writer = cv2.VideoWriter(name, fourcc, framerate, size)
Разберем эти аргументы:
- name — наименование;
- fourcc — кодек (не будем рассматривать подробно, ставим -1, что означает выбор кодека по умолчанию)
- framerate — фреймрейт (количество кадров в секунду)
- size — разрешение (значения пикселей по ширине и высоте)
Также внутри цикла чтения камеры/видео записываем кадры в этот объект. Для этого используем функцию out.write(frame). Для выгрузки файла напишем функцию out.release().
В итоге имеем следующий код:
import cv2
file = "MH.mp4" # путь к файлу с картинкой
cap = cv2.VideoCapture(file)
out = cv2.VideoWriter('captured.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
ret,frame = cap.read()
out.write(frame)
frame_re = cv2.rotate(frame , cv2.ROTATE_180)
cv2.imshow('frame',frame_re)
if cv2.waitKey(33) & 0xFF == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
Создание ползунка для видео
Теперь добавим в видео ползунок. С помощью ползунка мы сможем открыть любой кадр из видео.
Для создания ползунка необходимо использовать функцию createTrackbar. Функция принимает первым аргументом свое название, вторым — изображение, куда он вставляется. Третьим и четвертым аргументом укажем нижнюю и верхнюю границу изменяемого им диапазона. Пятый аргумент — выполняемая функция.
Приведем текст программы:
import cv2
frames = []
file = "MH.mp4" # путь к файлу с картинкой
cap = cv2.VideoCapture(file)
# 1 чтение изображений
while True:
ret, img = cap.read()
if ret == False:
break
frames.append(img)
# Функция для ползунка
def nothing(arg): pass
cv2.namedWindow('img')
# Создание ползунка
cv2.createTrackbar('frame_number', 'img', 0,len(frames)-1, nothing)
# Отображение выбранного
while True:
frame_number = cv2.getTrackbarPos('frame_number', 'img')
print(frame_number)
img = frames[frame_number]
cv2.imshow('img', img)
if cv2.waitKey(33) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
Разберем программу.
- Сначала создаем объект cap, к которому «присоединяется» видео.
- В цикле заполняем список frames изображениями из видео. Список надо создать заранее.
- Создаем функцию для ползунка. Функция ничего не делает.
- Создаем сам ползунок. В качестве диапазона задаем кадры от 0 до длины списка. Индекс последнего элемента списка не равен длине списка. Указываем «пустую» функцию пятым аргументом.
- Вторым циклом выводим выбранное на ползунке изображение.
- Запускаем, двигаем ползунок:
Добавить комментарий