用于视频处理的最常用Python模块是什么?
我需要做以下几件事:
- 打开一个视频文件
- 把视频里的每一帧当成图片来处理
- 对这些视频帧的图片进行一些分析
- 在这些视频的图片上进行绘图
- 用这些修改后的内容创建一个新的视频
OpenCV在我的摄像头上不太好使,但python-gst可以用。请问用python-gst能做到这些吗?
谢谢!
4 个回答
3
我用这个脚本把一部电影转换成了一个numpy数组和二进制存储:
"""
Takes a MPEG movie and produces a numpy record file with a numpy array.
"""
import os
filename = 'walking'
if not(os.path.isfile(filename + '.npy')): # do nothing if files exists
N_frame = 42 # number of frames we want to store
os.system('ffmpeg -i WALK.MOV.qt -f image2 foo-%03d.png')
# convert them to numpy
from numpy import zeros, save, mean
from pylab import imread
n_x, n_y, n_rgb = imread('foo-001.png').shape
mov = zeros((n_y, n_x, N_frame))
for i_frame in range(N_frame):
name = 'foo-%03d.png' % (i_frame +1)
mov[:n_y,:n_x,i_frame] = flipud(mean(imread(name), axis=2)).T
os.system('rm -f foo-*.png')
save(filename + '.npy', mov)
注意,根据你的习惯,你可能不想翻转图像。如果不翻转的话,你可以这样加载它:
load('walking.npy')
3
我自己也在经历这个问题。用MATLAB的mmreader只需要几行代码,但我已经花了两天时间试图弄明白怎么把视频文件中的帧提取到numpy里。如果你的硬盘空间足够,而且不需要实时处理,你可以使用:
mplayer -noconsolecontrols -vo png blah.mov
然后可以用下面的代码把.png文件导入到numpy中:
pylab.imread('blah0000001.png')
我知道这不是完整的解决方案,但希望对你有帮助。祝好运!
7
你的意思是说,opencv无法连接到你的摄像头,还是无法读取摄像头录制的视频文件呢?
你有没有试过把视频保存成其他格式呢?
OpenCV可能是支持最好的Python图像处理工具。