2012-11-09 15 views
11

Potrzebuję użyć zestawu narzędzi do akwizycji obrazów MATLAB, aby zdobyć kilka obrazów z kamery wideo. Wydaje się, że MATLAB jest dobrym rozwiązaniem, ponieważ pozyskiwanie obrazów jest łatwe i później muszę wykonać trochę przetwarzania obrazu. Szukałem przez długi czas, ale nadal nie znalazłem nic pracy.Uruchamianie skryptu MATLAB z python + pass args

Było kilka prób:


mlabwrap 1,1 - uruchomić skrypt systemu MATLAB:

skrypt MATLAB jak:

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

można uruchomić ten skrypt za pomocą :

mlab.run('script.m') 

Ale, gdzie przekazać niektóre argumenty (katalog, opis obrazu itp.)? Nie znalazłem nic z powodu słabego dokumentu mlabwraps. Użyłem mlab.lookfor ('tematem zainteresowania') funkcji bez powodzenia


mlabwrap 1.1 - Obraz acqusisition za pomocą mLAB funkcje:

Na pierwszy rzut oka nie ma możliwości, aby odczytać "obiektem wejście video" ma funkcje, takie jak:

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

pytona-m atlab most

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

Mam Windows7 64 bit jak OS. Mówią, że działa tylko na systemie UNIX.


Nipype

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

Wydaje się być bardzo nowy. Nie próbowałem go zainstalować. Wydaje się pasować do mojego problemu, ale nie do okien.


PyMAT

Nie python 2.7 Wsparcie


Więc czy jest ktoś, kto może mi pomóc?

+0

Ja tylko starałem pymatlab, mogę go uruchomić w systemie Windows z jakiegoś patcha (http: // SourceForge .net/p/pymatlab/tickets/1 /), ale w moim przypadku mam problemy z wymiarami typu danych (jak na razie działa tylko z ciągami) – lib

Odpowiedz

12

Chociaż nie jestem bardzo obeznany z python-Matlab-bridge, Nipype lub PyMAT, zrobiłem sporo pracy z mlabwrap, a ja postaram i odpowiedz na pytanie w odniesieniu do tego pakietu .

Po pierwsze, będzie dużo łatwiej, jeśli pracujesz pod względem funkcji zamiast skryptów.Załóżmy przekształcenie skrypt Matlab jako funkcja w myFunction.m tak:

function myFunction(v_input, directory, file_name) 

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

Następnie można wywołać tę funkcję z wykorzystaniem mlabwrap.mlab pytona, przekazując ciągów dla argumentów funkcji. Wszystkie funkcje Matlaba, w tym funkcje zdefiniowane przez użytkownika, są dostępne jako atrybuty z modułu mlabwrap.mlab.

>>> from mlabwrap import mlab 
>>> mlab.myFunction('testadaptor', './', 'image.png') 

mlabwrap będzie konwertować ciągi w formacie Matlab-czytelnej i przekazać je do funkcji jako argumenty. Jeśli podniesiono wartość AttributeError, oznacza to zazwyczaj, że funkcja nie znajduje się na ścieżce Matlaba. Można go dodać za pomocą polecenia:

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

Podobnie jak przestrodze uwaga, mlabwrap automatycznie konwertować niektóre typy argumentów, takich jak ciągi lub NumPy tablic iz powrotem między Python i Matlab. Istnieje jednak wiele typów, takich jak klasy i klasy Matlaba, których nie można przekonwertować. W takim przypadku zwróci on MLabObjectProxy z funkcji Matlab. Te obiekty proxy nie mogą być modyfikowane w Pythonie ani konwertowane na typy Python, ale można je z powodzeniem przekazywać poprzez mlabwrap do innych funkcji Matlaba. Często dla funkcji ze złożonym wyjściem lepiej jest zapisać to wyjście do pliku w funkcji Matlab i zaimportować dane z pliku po stronie Pythona. Powodzenia!

4
  1. Python/OpenCV: można użyć rodzimego rozwiązania do pobierania obrazów z urządzenia wideo. Dzięki OpenCV możesz nawet przetwarzać obrazy w czasie rzeczywistym.
  2. matlab_wrapper: przyjmując, że masz funkcję MATLAB (nie skrypt), która akceptuje niektóre parametry i zwraca tablice obrazów, np. [img] = get_image(some_parameter), można napisać coś takiego:
matlab = matlab_wrapper.MatlabSession() 
img = matlab.workspace.get_image(some_parameter) 

Oświadczenie: Jestem autorem matlab_wrapper

Powiązane problemy