虽然我对python-matlab- bridge,Nipype或PyMAT不太熟悉,但是我已经对mlabwrap做了大量的工作,并且我将尽力回答关于该软件包的问题。
首先,如果您使用功能而不是脚本来工作,将会容易得多。让我们将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结构和类。在这种情况下,它将MLabObjectProxy
从Matlab函数返回an 。这些代理对象无法在Python中操作或转换为Python类型,但可以通过mlabwrap成功传递到其他Matlab函数中。通常,对于具有复杂输出的函数,最好将该输出写入Matlab函数中的文件,并在Python端从该文件导入数据。祝好运!