在Python中暂停和重新启动视频

问题描述 投票:1回答:1

我有几个视频,我想逐帧浏览它们,然后通过按键盘键(取决于帧)对其中一些进行注释。对于许多帧,我都不会按任何键。这是我到目前为止的内容:

import numpy as np
import cv2

cap = cv2.VideoCapture('video.mp4')

frame_number = []
annotation_list = []

i = 0
while(True):        
    # Read one frame.
    ret, frame = cap.read()

    # Show one frame.
    cv2.imshow('frame', frame)

    # Set the time between frames in miliseconds
    c = cv2.waitKey(500)
    i = i + 1

    try:
        annotation_list = annotation_list + [chr(c)]
        frame_number = frame_number + [i]
    except:
        continue

因此,这将显示每个帧0.5秒,并与我按下按钮的每个帧相关联,即给定的字母。我现在需要的是这样一个选项,即对于给定的帧,我可以在需要的时间停止视频,例如按“空格”键,以考虑如何对其进行注释,然后按“空格”键。 ”(我决定如何注释后)再次继续播放视频。如何添加此暂停/继续选项?谢谢!

python opencv image-processing video video-capture
1个回答
0
投票

您可以通过从cv2.waitKey()的返回值确定按下了哪个键来实现暂停/恢复功能。要暂停视频,您可以不向cv2.waitKey()传递任何参数(或0),该参数将无限期等待直到按下某个键,然后它将恢复视频。从docs

cv2.waitKey()是键盘绑定功能。它的参数是时间(以毫秒为单位)。该函数将为任何键盘事件等待指定的毫秒数。如果在此期间按任意键,程序将继续。如果传递0,它将无限期地等待击键。还可以将其设置为检测特定的按键,例如是否按下键a等,我们将在下面讨论。

要确定是否按下空格键,我们可以检查返回的值是否为32。如果按下此键,则我们将无限期暂停帧,直到按下任何键,然后我们才能恢复视频。这是一个例子:

import cv2

cap = cv2.VideoCapture('video.mp4')
if not cap.isOpened():
    print("Error opening video")

while(cap.isOpened()):
    status, frame = cap.read()
    if status:
        cv2.imshow('frame', frame)
    key = cv2.waitKey(500)

    if key == 32:
        cv2.waitKey()
    elif key == ord('q'):
        break

将来如果您想在按下某个键后执行某些操作,则可以使用此脚本确定“键码”:

import cv2

# Load a test image
image = cv2.imread('1.jpg')

while(True):
    cv2.imshow('image', image)
    key = cv2.waitKey(1)
    # 'q' to stop
    if key == ord('q'):
        break
    # Print key 
    elif key != -1:
        print(key)
© www.soinside.com 2019 - 2024. All rights reserved.