视频在用户提示下逐帧处理

时间:2016-11-15 20:12:36

标签: python python-2.7 opencv video-processing

我希望处理一些视频数据,并希望逐帧进行。我希望看到每个帧的结果,所以希望在帧处理之间暂停,由用户输入(可能是一个键)打破。

有没有有效的方法在Python中实现这一目标? 这是我目前的代码,目前它还没有我不确定这是否是最好的方法呢?

**编辑:**我已经更改了代码以实现我的目标。只需要添加另一行waitKey命令。 :P

import cv2
import scipy.ndimage as ndimage

cap = cv2.VideoCapture("#Some_Video")

while(True):
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    fil_im = ndimage.correlate(gray, '#Some_filter')
    cv2.imshow('filtered figure', fil_im)

    k = cv2.waitKey(0)
    if k == 27:
            break
    elif k == 32:
            continue
    # Continues to the next frame on 'space', quits the loop on 'esc' key.

cap.release()
cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:-1)

您可以使用cv2.waitKey(0)暂停while循环的迭代。参数0意味着代码将无限期地等待您按下一个键,然后再转到下一行代码。

将代码修改为:

while(True):
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    fil_im = ndimage.correlate(gray, '#Some_filter')
    cv2.imshow('filtered figure', fil_im)
    cv2.waitKey(0)# waits for user prompt here 

    if cv2.waitKey(0) == 'b':
            break
            #breaks while loop only if you press b, else it goes to next iteration