2012-11-09 6 views
11

Ich muss die MATLAB Image Acquisition Toolbox verwenden, um wenige Bilder von einer Videokamera zu erfassen. MATLAB scheint eine gute Lösung zu sein, da die Bildaufnahme einfach ist und ich danach einige Bildverarbeitungen machen muss. Ich habe lange gesucht, aber noch nichts gefunden.Führen Sie ein MATLAB-Skript aus Python + Passargumente

Es gab einige Versuche:


mlabwrap 1.1 - ein MATLAB-Skript ausführen:

Ein MATLAB-Skript wie:

vid = videoinput('testadaptor'); 
img = getsnapshot(vid); 
imwrite(img,'./image.png','png'); 

Sie dieses Skript ausführen können mit :

mlab.run('script.m') 

Aber, wo einige Argumente übergeben (Verzeichnis, Bildbeschreibung, etc)? Ich habe nichts gefunden wegen mlabwraps armer Dokumentation. Ich habe die mlab.lookfor ('Thema von Interesse') Funktion ohne Erfolg


verwendet

mlabwrap 1.1 - Bild acqusisition von MLab Funktionen:

Auf den ersten Blick keine Möglichkeit heraus zu lesen ein "Videoeingabeobjekt", keine Funktionen wie:

image = getsnapshot(video input object) 
imwrite(image,'directiory\image.png','png') 

Python-m atlab-Brücke

https://github.com/jaderberg/python-matlab-bridge

Ich habe als O Windows7 64 Bit bekommt. Sie sagen, es arbeitet nur an Unix.


Nipype

http://nipy.sourceforge.net/nipype/api/generated/nipype.interfaces.matlab.html

scheint ganz neu zu sein. Ich habe nicht versucht, es zu installieren. Es scheint zu meinem Problem zu passen, aber nicht zu Windows, denke ich.


PyMAT

Keine Python 2.7 Unterstützung


So ist es jemanden, der mir helfen kann?

+0

ich, gerade versucht pymatlab ich es in Windows mit einigen Patch laufen konnte (http: [img] = get_image(some_parameter), Sie so etwas schreiben könnte // Source .net/p/pymatlab/tickets/1 /) aber in meinem Fall habe ich Probleme mit den Datentyp Dimensionen (bisher funktioniert es nur mit Strings) – lib

Antwort

12

Obwohl ich mit python-matlab-bridge, Nipype oder PyMAT nicht vertraut bin, habe ich ziemlich viel Arbeit mit mlabwrap gemacht, und ich werde versuchen, Ihre Frage zu diesem Paket zu beantworten .

Zunächst wird es viel einfacher, wenn Sie in Bezug auf Funktionen statt Skripten arbeiten.Lassen Sie uns Ihre Neufassung Matlab-Skript als eine Funktion, in myFunction.m etwa so:

function myFunction(v_input, directory, file_name) 

    vid = videoinput(v_input); 
    img = getsnapshot(vid); 
    location = [directory file_name] 
    imwrite(img, location,'png'); 

Sie dann diese Funktion aus Python mlabwrap.mlab mit aufrufen können, in Zeichenfolgen für die Funktionsargumente übergeben. Alle Matlab-Funktionen, einschließlich benutzerdefinierter Funktionen, sind als Attribute aus dem Modul mlabwrap.mlab verfügbar.

mlabwrap konvertiert Ihre Strings in ein Matlab-lesbares Format und übergibt sie an Ihre Funktion als Argumente. Wenn eine AttributeError ausgelöst wird, bedeutet das normalerweise, dass sich Ihre Funktion nicht im Matlab-Pfad befindet. Sie können es mit dem Befehl hinzufügen:

>>> mlab.path(mlab.path(), 'C:\function\directory') 

Gerade als warnenden Hinweis, mlabwrap wird automatisch einige Argumenttypen wie Strings oder numpy Arrays hin und her zwischen Python und Matlab konvertieren. Es gibt jedoch viele Typen, z. B. Matlab-Strukturen und -Klassen, die nicht konvertiert werden können. In diesem Fall wird ein MLabObjectProxy von der Matlab-Funktion zurückgegeben. Diese Proxy-Objekte können nicht in Python manipuliert oder in Python-Typen konvertiert werden, können aber erfolgreich durch mlabwrap in andere Matlab-Funktionen übertragen werden. Oft ist es für Funktionen mit komplexer Ausgabe besser, diese Ausgabe in eine Datei innerhalb der Matlab-Funktion zu schreiben und die Daten aus der Datei auf der Python-Seite zu importieren. Viel Glück!

4
  1. Python/OpenCV: Sie können die native Lösung verwenden, um Bilder von Ihrem Videogerät zu erfassen. Mit OpenCV können Sie sogar Echtzeit-Bildverarbeitung durchführen.
  2. matlab_wrapper: vorausgesetzt, Sie haben eine MATLAB Funktion (nicht Skript), die einige Parameter akzeptiert und Bild-Array, z.
matlab = matlab_wrapper.MatlabSession() 
img = matlab.workspace.get_image(some_parameter) 

Disclaimer: Ich bin der Autor von matlab_wrapper