【问题标题】:Overlay a graph over a Video在视频上叠加图表
【发布时间】:2015-11-13 17:01:43
【问题描述】:

是否有打开 mp4 并覆盖图形(Matplotlib)或类似的解决方案?

类似this

【问题讨论】:

    标签: python matplotlib ffmpeg


    【解决方案1】:

    您可以使用 openCV 从视频中获取帧,如 example,并使用 matplotlib 在顶部绘制图形,例如

    import cv2
    import matplotlib.pyplot as plt
    import numpy as np
    
    filename = './SampleVideo.mp4'
    cap = cv2.VideoCapture(filename)
    
    try:
        frames = int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT))
        width  = int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH))
        height = int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT))
    except AttributeError:
        frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
        width  = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    
    fig, ax = plt.subplots(1,1)
    plt.ion()
    plt.show()
    
    #Setup a dummy path
    x = np.linspace(0,width,frames)
    y = x/2. + 100*np.sin(2.*np.pi*x/1200)
    
    for i in range(frames):
        fig.clf()
        flag, frame = cap.read()
    
        plt.imshow(frame)
        plt.plot(x,y,'k-', lw=2)
        plt.plot(x[i],y[i],'or')
        plt.pause(0.01)
    
        if cv2.waitKey(1) == 27:
            break
        
    

    我从here得到了视频。

    【讨论】:

    • 我让你的例子工作了。我将如何保存带有图形的视频文件?
    • 嗨 @tylerjw,您可以使用 cv2 VideoWritermatplotlib manimation 作家。就我个人而言,我会将帧保存到文件中,然后从图像构建视频,使用 savefig('./out{:05d}'.format(i).png 获取一系列具有连续名称的文件,然后与 ffmpeg 或其他东西放在一起......
    • 谢谢。我发现 matplotlib 对我的应用程序来说太慢了(不是实时的,但比几秒/帧快)所以我将尝试使用 opencv 和他们的绘图工具来编写它。
    • 视频网站有警告不要从我的浏览器继续;(
    • 嗨@KansaiRobot,刚刚更新了链接
    猜你喜欢
    • 1970-01-01
    • 2022-08-08
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多