2009-09-26 8 views
12

Ich muss:Meist genutztes Python-Modul für die Videoverarbeitung?

  1. Öffnen Sie eine Videodatei
  2. Iterate über den Rahmen der Datei als Bilder
  3. eine Analyse in diesem Bild Rahmen des von der
  4. Draw in diesem Bild Video Werke Video
  5. erstellen Sie ein neues Video mit diesen Änderungen

OpenCV ist nicht für meine Webcam funktioniert, aber python-gst ist Arbeiten. Ist dies mit Python-GST möglich?

Vielen Dank!

+1

Obwohl dies alt ist, habe ich Python-Code, der einen Dateinamen und einen Iterator von PIL-Bildern zurückgibt. Ich kann den Quellcode veröffentlichen, wenn jemand interessiert ist. – carl

Antwort

6

Meinen Sie, opencv kann keine Verbindung zu Ihrer Webcam herstellen oder kann die von ihm aufgenommenen Videodateien nicht lesen?

Haben Sie versucht, das Video in einem anderen Format zu speichern?

OpenCV ist wahrscheinlich die beste unterstützte Python Bildbearbeitungswerkzeug

+1

+1 für die Empfehlung von OpenCV. – whatnick

0

Nur eine C/C++ Wrapper für Ihre Webcam bauen und dann SWIG verwenden oder SIP diese Funktionen von Python zugreifen. Dann verwenden Sie OpenCV in Python, das ist die beste Open-Source-Computer-Vision-Bibliothek in freier Wildbahn.

Wenn Sie sich um die Leistung sorgen und unter Linux arbeiten, können Sie kostenlose Versionen von Intel Performance Primitives (IPP) herunterladen, die zur Laufzeit ohne Aufwand von OpenCV geladen werden können. Bei bestimmten Algorithmen konnten Sie eine Leistungssteigerung von 200% erzielen, plus automatische Multicore-Unterstützung für die meisten zeitraubenden Funktionen.

+1

Denken Sie daran, dass nicht viele Leute wissen, wie man Wrapper für Python erstellt, und die Frage des OPs betrifft meist eine bereits existierende Bibliothek. – skeggse

+0

Alte Q, aber ich würde Cython über SWIG oder SIP empfehlen. Es ist * viel * einfacher zu benutzen, unterstützt C und C++ und hat eine bessere Dokumentation. Ich habe alle drei oben genannten Tools plus Boost Python ausprobiert und Cython war die einzige, die ich tatsächlich in einer angemessenen Zeit arbeiten konnte. – Endophage

3

Ich gehe das selbst durch. Es sind nur ein paar Zeilen in MATLAB, die mmreader verwenden, aber ich habe bereits zwei Arbeitstage damit verbracht, herauszufinden, wie man Frames aus einer Videodatei in numpy ziehen kann. Wenn Sie genügend Speicherplatz haben, und es muss nicht in Echtzeit sein, können Sie verwenden:

mplayer -noconsolecontrols -vo png blah.mov 

und dann die PNG-Dateien in numpy ziehen mit:

pylab.imread('blah0000001.png') 

ich das wissen ist unvollständig, aber es kann dir trotzdem helfen. Viel Glück!

+0

Ich fühle dich.Ich überlege, ob Python ein guter Ersatz für Matlab wäre, und fand es besonders bei einfacher Videoverarbeitung sehr mangelhaft. –

3

benutzte ich dieses Skript einen Film zu einem numpy Array + binären Speicher zu konvertieren:

""" 
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) 

beachten Sie, dass Ihre Konventionen abhängig von Ihnen nicht um das Bild drehen möchten. Sie können es dann laden mit:

load('walking.npy')