matplottlib在jupyter笔记本中更新视频

时间:2020-11-01 19:44:52

标签: python opencv matplotlib jupyter-notebook

我正在使用opencvmatplotlib来显示jupyter笔记本中视频的帧。 jupyter笔记本正在使用opencv.imshow()远程运行​​,导致其崩溃。因此,我试图让matplotlib显示视频帧,并希望能使它更新到位。

所以,我有以下内容:

%matplotlib inline

import cv2
from matplotlib import pyplot as plt
import time

然后我加载视频并将一些参数设置为:

cap = cv2.VideoCapture('test.avi')
fps = cap.get(cv2.CAP_PROP_FPS)
delay = 1.0 / fps

现在我尝试按如下所示循环显示视频:

count = 0
while cap.isOpened():
    ret, frame = cap.read()
    if ret:
        if count == 0:
            height, width, depth = frame.shape
            dpi = 80
            fig_size = width / float(dpi), height / float(dpi)
            # Setup the matplotlib figure and axes
            fig, ax = plt.subplots(figsize=fig_size)

        frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
        ax.imshow(frame, interpolation='none', aspect="auto", cmap="gray")
        plt.show()
        
        time.sleep(delay)
        
        count += 1
        if count > 1000:
            break
    else:
        break
cap.release()
cv2.destroyAllWindows()

与此相关的问题是matplotlib显示屏显示第一帧,并且永远不会更新。我还尝试过在clear_output(wait=True)调用之前调用show(),但这只是立即清除输出,并且再也不会显示。

我也尝试过类似的事情:

if count == 0:
    height, width, depth = frame.shape
    dpi = 80
    fig_size = width / float(dpi), height / float(dpi)
    
    image = plt.imshow(frame)
else:
    image.set_data(frame)

plt.pause(delay)

因此基本上可以替换数据,但这也能以某种方式显示一张图像,并且似乎不会在循环中更新。

0 个答案:

没有答案