首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python + pass args运行MATLAB脚本

从python + pass args运行MATLAB脚本
EN

Stack Overflow用户
提问于 2012-11-09 15:55:32
回答 2查看 16.8K关注 0票数 12

我期待从MATLAB从Python。我需要使用MATLAB图像采集工具箱,以获得少数图像从摄像机。

MATLAB似乎是一个不错的解决方案,因为图像采集很容易,我必须做一些图像处理之后。我已经搜索了很长一段时间,但是我仍然没有从Python中找到任何可行的方法。

以下是我的一些尝试:

运行MATLAB-脚本:

MATLAB脚本,如:

代码语言:javascript
复制
vid = videoinput('testadaptor');
img = getsnapshot(vid);
imwrite(img,'./image.png','png');

您可以通过以下方法运行此脚本:

代码语言:javascript
复制
mlab.run('script.m')

但是,在哪里传递一些参数(目录、图像描述等)?我没有找到任何东西,因为拖板,糟糕的纪录片。我使用了mlab.lookfor(“感兴趣的主题”)函数,但没有成功

标记包1.1 -使用mlab函数获取图像:

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

代码语言:javascript
复制
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

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

PyMAT

不支持python 2.7

,那么有谁能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-09 22:27:23

虽然我不太熟悉python bridge、Nipype或PyMAT,但是我已经做了相当多的工作,我将尝试回答您关于这个包的问题。

首先,如果您使用的是函数而不是脚本,那么它就会容易得多。让我们在myFunction.m中将Matlab脚本重铸为一个函数,如下所示:

代码语言:javascript
复制
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模块的属性使用.

代码语言:javascript
复制
>>> from mlabwrap import mlab
>>> mlab.myFunction('testadaptor', './', 'image.png')

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

代码语言:javascript
复制
>>> mlab.path(mlab.path(), 'C:\function\directory')

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

票数 12
EN

Stack Overflow用户

发布于 2014-07-20 13:14:00

  1. Python/OpenCV:您可以使用本机解决方案从视频设备中获取图像。使用OpenCV,您甚至可以进行实时图像处理。
  2. 包装器:假设您有一个接受某些参数并返回图像数组(例如[img] = get_image(some_parameter) )的MATLAB函数(而不是脚本),您可以编写如下内容:
代码语言:javascript
复制
matlab = matlab_wrapper.MatlabSession()
img = matlab.workspace.get_image(some_parameter)

免责声明:我是matlab_wrapper的作者

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13311415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档