13

我需要:

  1. 打开视频文件
  2. 将文件的帧作为图像进行迭代
  3. 在视频的这个图像帧中做一些分析
  4. 在此视频图像中绘制
  5. 使用这些更改创建一个新视频

OpenCV 不适用于我的网络摄像头,但 python-gst 正在运行。这可能使用 python-gst 吗?

谢谢!

4

4 回答 4

7

你的意思是opencv无法连接到你的网络摄像头或无法读取它录制的视频文件?

您是否尝试过将视频保存为其他格式?

OpenCV 可能是最受支持的 python 图像处理工具

于 2009-09-26T04:47:50.210 回答
3

我自己正在经历这个。使用 mmreader 在 MATLAB 中只有几行代码,但我已经花了两个工作日试图弄清楚如何将视频文件中的帧提取到 numpy.xml 中。如果您有足够的磁盘空间,并且不必是实时的,您可以使用:

mplayer -noconsolecontrols -vo png blah.mov

然后使用以下命令将 .png 文件拉入 numpy:

pylab.imread('blah0000001.png')

我知道这是不完整的,但它仍然可以帮助你。祝你好运!

于 2009-12-18T17:36:04.793 回答
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')
于 2009-12-21T10:25:19.613 回答
0

只需为您的网络摄像头构建一个 C/C++ 包装器,然后使用 SWIG 或 SIP 从 Python 访问这些函数。然后在 Python 中使用 OpenCV,这是目前最好的开源计算机视觉库。

如果您担心性能并且在 Linux 下工作,您可以下载英特尔性能基元 (IPP) 的免费版本,该版本可以在运行时从 OpenCV 零努力地加载。对于某些算法,您可以获得 200% 的性能提升,以及对大多数耗时功能的自动多核支持。

于 2009-09-30T11:00:07.157 回答