Запустите MATLAB script из python + pass args
Мне нужно использовать MATLAB Image Acquisition Toolbox для получения нескольких изображений с видеокамеры. MATLAB кажется хорошим решением, потому что Image Acquisition является легким, и я должен сделать некоторую обработку изображений впоследствии. Я долго искал, но я все еще не нашел ничего работающего.
Были некоторые попытки:
mlabwrap 1.1 - запустите MATLAB- script:
A MATLAB script как:
vid = videoinput('testadaptor');
img = getsnapshot(vid);
imwrite(img,'./image.png','png');
Вы можете запустить этот script, используя:
mlab.run('script.m')
Но где передать некоторые аргументы (каталог, описание изображения и т.д.)?
Я ничего не нашел из-за плохого документального документа.
Я использовал функцию mlab.lookfor( "тема интереса" ) без успеха
mlabwrap 1.1 - Захват изображения с использованием функций mlab:
На первый взгляд нет возможности считывать "объект видеовхода", нет таких функций, как:
image = getsnapshot(video input object)
imwrite(image,'directiory\image.png','png')
Python-Matlab-мост
https://github.com/jaderberg/python-matlab-bridge
У меня Windows 7 64 бит как ОС. Говорят, что он работает только на unix.
Nipype
http://nipy.sourceforge.net/nipype/api/generated/nipype.interfaces.matlab.html
Кажется, он очень новый. Я не пытался его установить. Я думаю, что это подходит для моей проблемы, но не для окон.
PyMAT
Поддержка python 2.7
И есть ли кто-нибудь, кто может мне помочь?
Ответы
Ответ 1
Пока я не очень хорошо знаком с python-matlab-bridge, Nipype или PyMAT, я много работал с mlabwrap, и я постараюсь ответить на ваш вопрос в отношении этого пакета.
Во-первых, это будет намного проще, если вы будете работать с точки зрения функций, а не скриптов. Позвольте переделать ваш Matlab script как функцию, в myFunction.m
следующим образом:
function myFunction(v_input, directory, file_name)
vid = videoinput(v_input);
img = getsnapshot(vid);
location = [directory file_name]
imwrite(img, location,'png');
Затем вы можете вызвать эту функцию из python с помощью mlabwrap.mlab
, передавая строки для аргументов функции. Все функции Matlab, включая пользовательские функции, доступны как атрибуты из модуля mlabwrap.mlab
.
>>> from mlabwrap import mlab
>>> mlab.myFunction('testadaptor', './', 'image.png')
mlabwrap преобразует ваши строки в Matlab-читаемый формат и передаст их в вашу функцию в качестве аргументов. Если a AttributeError
поднят, это обычно означает, что ваша функция не находится на пути Matlab. Вы можете добавить его с помощью команды:
>>> mlab.path(mlab.path(), 'C:\function\directory')
Как и предостережение, mlabwrap автоматически преобразует некоторые типы аргументов, такие как строки или массивы numpy между Python и Matlab. Однако существует много типов, таких как структуры и классы Matlab, которые он не может преобразовать. В этом случае он вернет функцию MLabObjectProxy
из функции Matlab. Эти прокси-объекты нельзя манипулировать в Python или преобразовывать в типы Python, но могут быть успешно переданы через mlabwrap в другие функции Matlab. Часто для функций со сложным выходом лучше записать этот вывод в файл в функции Matlab и импортировать данные из файла со стороны Python.
Удачи!
Ответ 2
- Python/OpenCV: вы можете использовать собственное решение для получения изображений с вашего видео устройства. С помощью OpenCV вы можете даже обрабатывать изображения в реальном времени.
- matlab_wrapper: предполагается, что у вас есть функция MATLAB (не script), которая принимает некоторый параметр и возвращает массив изображений, например.
[img] = get_image(some_parameter)
, вы можете написать что-то вроде этого:
matlab = matlab_wrapper.MatlabSession()
img = matlab.workspace.get_image(some_parameter)
Отказ от ответственности: я являюсь автором matlab_wrapper