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

2024-04-18 08:45:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个视频,我想一帧一帧地浏览,并通过按键盘键(这取决于帧)来注释其中的一些视频。对于许多帧,我不会按任何键。到目前为止,我掌握的情况如下:

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秒,并关联到我按下按钮的每一帧,给定的字母。我现在需要的是一个选项,以便对于给定的帧,我可以在该帧停止视频,只要我需要,通过按“空格”例如,为了思考如何注释它,然后按“空格”再次继续视频,一旦我决定如何注释。如何添加此暂停/继续选项?谢谢您!你知道吗


Tags: importnumpynumber视频as选项情况annotation
1条回答
网友
1楼 · 发布于 2024-04-18 08:45:34

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

cv2.waitKey() is a keyboard binding function. Its argument is the time in milliseconds. The function waits for specified milliseconds for any keyboard event. If you press any key in that time, the program continues. If 0 is passed, it waits indefinitely for a key stroke. It can also be set to detect specific key strokes like, if key a is pressed etc which we will discuss below.

为了确定空格键是否被按下,我们可以检查返回值是否为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)

相关问题 更多 >