使用python中的pyglet从视频中进行运动计算

时间:2010-03-28 08:00:56

标签: python video-processing pyglet motion-detection

我正在编写一个简单的运动检测程序,但我希望它是跨平台的,所以我使用python和pyglet库,因为它提供了一种简单的方式来加载不同格式的视频(特别是wmv和mpeg)。到目前为止,我有下面给出的代码加载电影并在窗口中播放。现在我需要: 1)在时间t和t-1抓住帧 2)进行减法以查看哪些像素对于运动检测是活动的。

关于如何抓取帧并跳过帧的任何想法,是否可以将像素值放入numpy中的矩阵或直接来自pyglet?或者应该考虑使用pyglet以外的东西?

感谢 kuaywai


import pyglet  
import sys  
window = pyglet.window.Window(resizable=True)  
window.set_minimum_size(320,200)  
window.set_caption('Motion detect 1.0')  
video_intro = pyglet.resource.media('movie1.wmv')  
player = pyglet.media.Player()  
player.queue(video_intro)  

print 'calculating movie size...'  
if not player.source or not player.source.video_format:  
    sys.exit  

myWidth = player.source.video_format.width  
myHeight = player.source.video_format.height  
if player.source.video_format.sample_aspect > 1:  
    myWidth *= player.source.video_format.sample_aspect  
elif player.source.video_format.sample_aspect < 1:  
    myHeight /= player.source.video_format.sample_aspect  

print 'its size is %d,%d' % (myWidth,myHeight)  
player.play()  

@window.event  
def on_draw():  
        window.clear()  
        (w,h) = window.get_size()  
        player.get_texture().blit(0, h-myHeight,  
                              width=myWidth,  
                              height=myHeight)  

pyglet.app.run()  

1 个答案:

答案 0 :(得分:0)

对我来说,似乎你必须跳过播放功能并手动逐步浏览视频/动画,可能使用source.get_animation()。frames,这是一个帧列表,其中每个帧都是一个简单的图像。我猜这对于大型视频来说并不是真正具有实际意义,但这通常不是你应该用Python处理的东西。