12

PythonのMATLABを探しています。ビデオカメラからいくつかの画像を取得するには、MATLAB ImageAcquisitionToolboxを使用する必要があります。

画像取得は簡単で、後で画像処理を行う必要があるため、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

OSとしてWindows764ビットを使用しています。彼らは、それはUNIXでのみ機能していると言います。


ニピペ

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

とても新しいようです。私はそれをインストールしようとしませんでした。それは私の問題には当てはまるようですが、ウィンドウには当てはまらないと思います。


PyMAT

Python2.7はサポートされていません


それで、私を助けることができる人はいますか?

4

2 に答える 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');

次に、を使用してPythonからこの関数を呼び出しmlabwrap.mlab、関数の引数に文字列を渡すことができます。ユーザー定義関数を含むすべての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の構造体やクラスなど、変換できないタイプは多数あります。この場合、MLabObjectProxyMatlab関数からを返します。これらのプロキシオブジェクトは、Pythonで操作したり、Pythonタイプに変換したりすることはできませんが、mlabwrapを介して他のMatlab関数に正常に渡すことができます。多くの場合、複雑な出力を持つ関数の場合、その出力をMatlab関数内のファイルに書き込み、Python側のファイルからデータをインポートすることをお勧めします。幸運を!

于 2012-11-09T22:27:23.887 に答える
6
  1. Python / OpenCV:ネイティブソリューションを使用して、ビデオデバイスから画像を取得できます。OpenCVを使用すると、リアルタイムの画像処理を行うこともできます。
  2. matlab_wrapper :いくつかのパラメーターを受け入れて画像配列を返すMATLAB関数(スクリプトではない)があると仮定すると、たとえば[img] = get_image(some_parameter)、次のように記述できます。
matlab = matlab_wrapper.MatlabSession()
img = matlab.workspace.get_image(some_parameter)

免責事項:私はmatlab_wrapperの作者です

于 2014-07-20T13:14:00.957 に答える