从python + pass args运行MATLAB脚本

时间:2012-11-09 15:55:32

标签: python matlab wrapper mlabwrap

我需要使用MATLAB图像采集工具箱从摄像机中获取少量图像。 MATLAB似乎是一个很好的解决方案,因为图像采集很简单,之后我必须进行一些图像处理。我搜索了很长时间但仍然没有找到任何工作。

有一些尝试:


mlabwrap 1.1 - 运行MATLAB脚本:

MATLAB脚本,如:

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

您可以使用以下命令运行此脚本:

mlab.run('script.m')

但是,在哪里传递一些参数(目录,图像描述等)? 我没有找到任何东西,因为mlabwraps可怜的纪录片。 我已经使用了mlab.lookfor('主题感兴趣')函数而没有成功


mlabwrap 1.1 - 使用mlab函数进行图像采集:

乍一看,没有可能读出“视频输入对象”,没有以下功能:

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

蟒-MATLAB桥

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

我有Windows7 64位操作系统。他们说,它只在unix上工作。


Nipype

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

似乎很新。我没有尝试安装它。它似乎适合我的问题,但不适合Windows,我想。


PyMAT

没有python 2.7支持


那么有谁可以帮助我吗?

2 个答案:

答案 0 :(得分:12)

虽然我对python-matlab-bridge,Nipype或PyMAT不太熟悉,但我已经用mlabwrap完成了相当多的工作,我会尝试回答你关于那个包的问题。 / p>

首先,如果你在功能方面工作,而不是脚本,那将会容易得多。让我们将您的Matlab脚本重新定义为函数,在myFunction.m中如此:

function myFunction(v_input, directory, file_name)

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

然后你可以使用mlabwrap.mlab从python中调用这个函数,传入函数参数的字符串。所有Matlab函数(包括用户定义的函数)都可以作为mlabwrap.mlab模块的属性使用。

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

mlabwrap会将您的字符串转换为Matlab可读格式,并将它们作为参数传递给您的函数。如果引发AttributeError,通常意味着您的函数不在Matlab路径上。您可以使用以下命令添加它:

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

正如一个注意事项,mlabwrap将自动转换一些参数类型,例如Python和Matlab之间来回的字符串或numpy数组。但是,有许多类型,例如Matlab结构和类,它无法转换。在这种情况下,它将从Matlab函数返回MLabObjectProxy。这些代理对象不能在Python中操作或转换为Python类型,但可以通过mlabwrap成功传递到其他Matlab函数中。通常,对于具有复杂输出的函数,最好将该输出写入Matlab函数中的文件,并从Python端的文件中导入数据。 祝你好运!

答案 1 :(得分:6)

  1. Python / OpenCV:您可以使用本机解决方案从您的视频设备获取图像。使用OpenCV,您甚至可以进行实时图像处理。
  2. matlab_wrapper:假设你有一个MATLAB 函数(不是脚本)接受一些参数并返回图像数组,例如: [img] = get_image(some_parameter),你可以这样写:
  3. matlab = matlab_wrapper.MatlabSession()
    img = matlab.workspace.get_image(some_parameter)
    

    免责声明:我是matlab_wrapper的作者