python - 显示处理后的视频帧(一帧一帧)Python

标签 python matplotlib video cv2 imshow

如果我有剪辑并且需要处理每个帧然后显示帧(显示它们)。我找到了许多关于如何获取剪辑帧然后将它们保存(写入)为新视频的示例。 但是,我尝试迭代每一帧,然后显示每个处理后的图像,但 Matplotlib 在循环完成后仅显示一张图像。

clip = VideoFileClip(filename)
for frame in clip.iter_frames():
    new_frame= Fun(frame)
    plt.imshow(new_frame)

update frame in matplotlib with live camera preview

我找到了这个链接,但它使用来自相机的帧,我需要一一显示从 Fun 收到的处理图像。所以我不想保存它或创建一个已处理帧的列表然后显示它们,我需要一一进行。

我使用了链接中的第二种方法,但它只打印 0, 0 并且只显示第一帧!似乎无法更改索引以进入下一帧!

import cv2
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
index =0


inF=[]
for frames in clip.iter_frames():
    inF.append(frames)

global inF


def grab_frame():
    print(index)
    frame = inF[index]
    return cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)

#Initiate the two cameras
cap1 = clip
#create two subplots
ax1 = plt.subplot(1,2,1)

#create two image plots
im1 = ax1.imshow(grab_frame())

def update(i):
    global index
    im1.set_data(grab_frame())
    index+=1


ani = FuncAnimation(plt.gcf(), update, interval=10)
plt.show()

你能帮我一下吗?有什么提示吗?

谢谢

最佳答案

这太长了,无法发表评论。因此发布作为答案。

我直接使用库读取视频文件。它正在按预期工作。颜色 BGR2RGB 正在按需要工作,并且帧正在更改并播放到最后一帧。

import cv2
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import skvideo.io

index =0
inF=skvideo.io.vread('test.avi')


#inF=[]
#for frames in clip.iter_frames():
 #   inF.append(frames)

global inF


def grab_frame():
    print(index)
    frame = inF[index]
    return cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)

#Initiate the two cameras
cap1 = clip
#create two subplots
ax1 = plt.subplot(1,2,1)

#create two image plots
im1 = ax1.imshow(grab_frame())

def update(i):
    global index
    im1.set_data(grab_frame())
    index+=1


ani = FuncAnimation(plt.gcf(), update, interval=10)
plt.show()

上面的代码没有问题。错误的根源在于您的视频或您阅读视频的方式。显然,它打印 0 到 32(test.avi 中的帧数)。

关于python - 显示处理后的视频帧(一帧一帧)Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52775904/

相关文章:

javascript - 除以 0 和 0.00

python - 安装错误 : installing basemap on windows

python - Whoosh 索引查看器

python - 提高点绘制精度

python - 使用 pip RHEL 安装 matplotlib 出现错误 "Cannot uninstall ' pyparsing'"

python - 使用 numpy 和 matplotlib 进行基本图像处理

javascript - HTTP 视频中的 "Skip to..."

python - 用于搜索和替换大字符串的最快 Python 方法

javascript - 支持流式传输 m4v 文件的 Flash 视频播放器

video - 在网页中播放视频的最佳做法是什么?