Добавление задержки X для захвата видео - PullRequest
0 голосов
/ 28 октября 2019

Для моих исследований я заново изучаю возможности с openCV, теперь я пытаюсь сделать cv2.videoCapture(0) с чтением изображений, сохраненным в буфере или чем-то подобном в течение 15 секунд, а затем показать их на экране с cv2.imshow() избуфер кадра.

Я понятия не имею, как буферизовать мой видеопоток, для контекста я хочу иметь возможность отложить свою веб-камеру, чтобы создать систему обратной связи для моего обучения жонглированию.

Итаквыполняя трюк, а затем несколько секунд, чтобы добраться до экрана и получить отзыв о том, что я только что сделал.

Вот способ, которым я сейчас снимаю свою веб-камеру, хотя это очень просто:

import cv2

cap = cv2.VideoCapture(0)

# Adding the frames to a buffer somewhere here in the script.

while True:

    frame = cap.read()

    cv2.imshow("frame", frame)

    key = cv2.waitKey(1)
    if key == 27:
        break

cap.release()
cv2.destroyAllWindows()

Вся помощь и ресурсы будут высоко оценены.

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Вот фрагмент, который я закончил воспроизведением видео с веб-камеры: (python) Он просто хранит кадры в списке и выдает их каждые "DELAY_SECONDS".

import cv2
import time

cap = cv2.VideoCapture(0)
print(cap.get(3))
print(cap.get(4))

start_time = time.time()

frames = []

DELAY_SECONDS = 5

while True:

    ret, frame = cap.read()
    frames.append(frame)

    if time.time() - start_time > DELAY_SECONDS:
        cv2.imshow("frame", frames.pop(0))

    key = cv2.waitKey(1)
    if key == 27:
        break

Спасибо, что помогли мне, какМой фрагмент может помочь некоторым из вас!

0 голосов
/ 29 октября 2019

Я думаю, что удобнее (и проще) просто записать видео в файл. Затем вы можете воспроизвести этот файл. Я набросал код из этих учебников .
Нажмите «r», и запись начнется. Когда вы закончите, нажмите «q». Затем нажмите «p» для воспроизведения видео. Чтобы повторить попытку, просто нажмите «r» еще раз, чтобы перезаписать предыдущий видеофайл. Дополнительным преимуществом является то, что вы можете сохранять видео, если хотите.
Вы можете легко расширить этот код с помощью дополнительных функций (и проверок ввода - их нет!), Но этого может быть достаточно для удовлетворения ваших потребностей.

import numpy as np
import cv2

def rec():
    # record a video
    cap = cv2.VideoCapture(0)
    # Define the codec and create VideoWriter object
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter('output.avi',fourcc, 30.0, (640,480))

    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret==True:
            out.write(frame)
            cv2.imshow('frame',frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break

    # Release everything if job is finished
    cap.release()
    out.release()

def playback():
    # play a video
    cap = cv2.VideoCapture('output.avi')

    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret:
            cv2.imshow('frame',frame)
        else:
            break
        if cv2.waitKey(30) & 0xFF == ord('q'):
            break

    cap.release()

# create empty window to process input
cv2.namedWindow('frame')
# main loop
while True:
    key = cv2.waitKey(10) 
    if key == ord('r'):
        rec()
    elif key == ord('p'):
        playback()
    elif key == ord('x'):
        # end main loop
        cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...