OpenCV, Python, Web Camera.

Начинаем серию статей про работу с фото и видео в Питоне. Мы будем использовать библиотеку OpenCV постепенно разбираясь с ее многочисленными функциями.

OpenCV (Open Source Computer Vision Library) одна из самых известных, бесплатных и современных библиотек машинного зрения. Но не только зрения , там огромный набор методов для работы с графикой и видео. Но все по порядку.

Установка.

Первым делом нам потребуется библиотека Numpy , если она не стоит то ставим:

 pip install numpy 

Далее ставим из репозитория OpenCV, вы так же можете собрать и из исходников, ссылка.

 pip install opencv-python # Только основные методы
 pip install opencv-contrib-python # Все методы если не ошибаюсь

Web Camera.

Мне нужна была вебка , по этому я начал с этого. Оказалось все очень просто, сразу к коду:

import cv2

cap = cv2.VideoCapture(0)

while True:
    ret, img = cap.read()
    cv2.imshow("camera", img)
    if cv2.waitKey(10) == 27: # Клавиша Esc
        break
cap.release()
cv2.destroyAllWindows()
  • cap = cv2.VideoCapture(0)

Подключаемся ( захватываем) нашу веб камеру. 0 — это индекс камеры, если их несколько то будет 0 или 1 и т.д.

  • ret, img = cap.read()

Читаем с устройства кадр(картинку) , метод возвращает флаг ret (True , False) и img — саму картинку ( массив numpy) .

  • cv2.imshow(«camera», img)

Функция imshow отображает изображение в указанном окне. Если окно не было создано, то создается новое. «camera» — имя окна , img — массив картинки.

По сути мы получаем картинку(кадр) с камеры и показываем его.

  • cv2.waitKey(10)

Как понятно из названия, ожидает нажатия клавиши в мсек. Возвращает код клавиши или -1 если ничего не было нажато.

Настройки камеры.

Все отлично, но хотелось бы немного более тонко настроить вебку :

cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FPS, 24) # Чистота кадров
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 600) # Ширина кадров в видеопотоке.
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) # Высота кадров в видеопотоке.
# Все параметры.

Можем даже немного поиграть с цветами :

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("camera", gray) # Будет показывать в оттенках серого.

cv2.cvtColor() — метод преобразует изображение из одного цветового пространства в другое. cv2.COLOR_BGR2GRAY — преобразование между RGB / BGR и оттенками серого . Но это все уже работа с изображением.

Запись видео с Вебки.

С записью видео тоже ничего сложного, сразу код:

import cv2

cap = cv2.VideoCapture(0)
codec = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('captured.avi',codec, 25.0, (640,480))
while(cap.isOpened()):
 ret, frame = cap.read()
 if cv2.waitKey(1) & 0xFF == or ('q') or ret == False:
    break
 cv2.imshow('frame', frame)
 out.write(frame)
out.release()
cap.release()
cv2.destroyAllWindows()
  • codec = cv2.VideoWriter_fourcc(*’XVID’)

Данный метод просто передает индификатор кодека, которым будем кодировать видео. Вы можете использовать и другие: MJPG , X264 .

  • out = cv2.VideoWriter(‘captured.avi’,codec, 25.0, (640,480))
  • cv2.VideoWriter(filename, fourcc, fps, frameSize)

Тут мы создаем объект в который по сути будет записываться видео кадр за кадром.

  • out.write(frame)

Записываем очередной кадр. Все кадры хранятся в памяти , теперь нам надо закрыть запить и сохранить все в файл :

  • out.release()

На этом мы маленький наш обзор заканчиваем. Весь код писался на Python 3.7 , во второй версии может отличаться.