如何获取cv2.imshow()来显示列表中的帧?

时间:2020-01-24 03:02:35

标签: python opencv

我正在尝试将网络摄像头中的最后50帧保存到列表中,然后播放这些帧。当我尝试显示框架时,显示窗口显示为灰色并表示无响应。如果我在while循环中显示框架,则会显示它,但是如果我尝试从列表中显示框架,则会在上述问题中保存它们。这是我正在运行的代码。

cap = cv2.VideoCapture(0)
image_list = []
count = 0
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    image_list.append(frame)

    #Display the resulting frame
    #cv2.imshow('frame',frame)   <---  this will show me my live frame by frame capture

    if count >= 50:
        break

    count += 1

# When everything is done, release the capture
cap.release()

for image in image_list:  
    cv2.imshow("frame", image)
    sleep(1)

1 个答案:

答案 0 :(得分:2)

如果您没有使用tkinter或Qt等适当的UI框架,则必须致电

cv2.waitKey(500)

定期,因为这是OpenCv的Highgui组件处理事件(并更新显示)的唯一方法。否则,highgui只会“挂断”。

for image in image_list:  
    cv2.imshow("frame", image)
    cv2.waitKey(500)

摘录自docs

注意

此函数是HighGUI中唯一可以获取和处理的方法 事件,因此对于正常事件需要定期调用 除非在需要以下操作的环境中使用HighGUI,否则将进行处理 关心事件处理。