От основ к практике OpenCV (2) - читать видеопоток

OpenCV
От основ к практике OpenCV (2) - читать видеопоток

Это 8-й день моего участия в Gengwen Challenge.Подробности о мероприятии, пожалуйста, проверьте:Обновить вызов

Сегодня я делюсь тем, как читать и записывать видеопотоки через OpenCV и захватывать видеопотоки с камеры через локальную сеть.

читать видеопоток

import cv2
cap = cv2.VideoCapture(0)

Здесь параметр 0 метода VideoCapture означает чтение видеопотока камеры по умолчанию.Если использование 0 не помогло, можно попробовать дать -1.При наличии на устройстве двух камер можно получить видеопоток второй камера через 1.

while(True):
    ret, frame = cap.read()
    cv2.imshow('frame',frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

Метод чтения чтения видеопотока cap вернет два возвращаемых значения, ret указывает, успешно ли получен видеопоток, поэтому обычно мы используем изображение видеопотока, которое является вторым кадром возвращаемого значения, и нам нужно судить, существует ли ret , и кадр Это изображение каждого кадра. Мы можем использовать метод imshow, введенный в предыдущем совместном использовании, для отображения захваченного изображения. Наконец, отслеживая поведение пользователя, мы можем определить, нажимает ли пользователь клавишу q. Если пользователь нажимает клавишу q, выполняется выходной цикл.

cap.release()
cv2.destroyAllWindows()

После выхода из цикла остается еще некоторая доводка, то есть объект шапки нужно освободить из памяти.

Читать полный код видеопотока

import cv2
# -1 1
cap = cv2.VideoCapture(0)

while(True):
    ret, frame = cap.read()
    if ret is None:
      break
    cv2.imshow('frame',frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

Мы также можем обрабатывать картинку перед выводом каждого кадра.Здесь видеопоток кадра считывается через cvtColor и данные видеопотока преобразуются в изображение в градациях серого в соответствии с указанным вторым параметром cv2.COLOR_BGR2GRAY

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

Изображение обрабатывается как изображение в градациях серого с использованием метода cvtColor. Затем используйте метод isOpened для cap, чтобы определить, успешно ли захвачено изображение.

while(cap.isOpened()):
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame',gray)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

Через экземпляр шапки также можно получить некоторые настройки чтения видеопотока, а также можно управлять размером видеовывода для чтения видеопотока, установив параметр on.

    print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
1280.0
720.0

сохранить изображение

VideoWriter_fourcc используется для установки формата сохраняемого видео.Они могут быть введены один за другим, или может быть введена строка, начинающаяся с *.Два метода следующие.

fourcc = cv2.VideoWriter_fourcc('X','V','I','D')
fourcc = cv2.VideoWriter_fourcc(*'XVID')

Использовать VideowRiter считывает видеопоток, первый параметр записывается в файл, формат видеовыхода второго параметра,

cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc,20.0,(1280,720))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret == True:
        
    # print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    # print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
        out.write(frame)
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('frame',gray)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
out.release()
cv2.destroyAllWindows()