从python +传递参数运行MATLAB脚本

问题描述 投票:12回答:2

我正在从Python的MATLAB中寻找。我需要使用MATLAB图像采集工具箱来从摄像机采集少量图像。

MATLAB似乎是一个不错的解决方案,因为图像获取很容易,之后我必须做一些图像处理。我已经搜索了很长时间,但仍然找不到从Python执行此操作的任何方法。

这是我的一些尝试:


mlabwrap 1.1-运行MATLAB脚本:

一个MATLAB脚本,如:

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

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

mlab.run('script.m')

但是,在哪里传递一些参数(目录,图像描述等)?由于mlabwraps纪录片不佳,我什么也没找到。我没有成功使用mlab.lookfor('theme of interest')函数


mlabwrap 1.1-使用mlab函数获取图像:

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

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

python-matlab-bridge

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


有没有人可以帮助我?

python matlab wrapper mlabwrap
2个回答
12
投票

虽然我对python-matlab-bridge,Nipype或PyMAT不太熟悉,但我已经对mlabwrap做了大量的工作,我将尽力回答有关该软件包的问题。

首先,如果您使用功能而不是脚本来工作,会容易得多。让我们以myFunction.m的形式将您的Matlab脚本重播为一个函数:

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调用此函数,并为函数参数传递字符串。 mlabwrap.mlab模块中的所有Matlab函数(包括用户定义的函数)都可以作为属性使用。

>>> 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端从该文件导入数据。祝你好运!


6
投票
  1. Python / OpenCV:您可以使用本机解决方案从视频设备获取图像。使用OpenCV,您甚至可以进行实时图像处理。
© www.soinside.com 2019 - 2024. All rights reserved.