Базовые операции с видео в 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() 

В результате получаем маленькое видео:

Изменение видео в OpenCV

Вырезание фрагмента

Вырежем по высоте с 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() 

В итоге получаем:

Изменение видео в OpenCV

Поворот

Поворот изображения осуществляется следующим образом:

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() 

Выводим результат:

Изменение видео в OpenCV

Сохранение

Для сохранения видеофрагмента необходимо создать объект для записи видео:

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()

Разберем программу.

  1. Сначала создаем объект cap, к которому «присоединяется» видео.
  2. В цикле заполняем список frames изображениями из видео. Список надо создать заранее.
  3. Создаем функцию для ползунка. Функция ничего не делает.
  4. Создаем сам ползунок. В качестве диапазона задаем кадры от 0 до длины списка. Индекс последнего элемента списка не равен длине списка. Указываем «пустую» функцию пятым аргументом.
  5. Вторым циклом выводим выбранное на ползунке изображение.
  6. Запускаем, двигаем ползунок:
Изменение видео в OpenCV

Курсы Робикс, в которых изучается этот материал.

  1. Duckietown: робот с системой Автопилота
Сохраните или поделитесь

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *