2012-11-09 4 views
11

Tôi cần sử dụng Hộp công cụ chuyển đổi hình ảnh MATLAB để có được vài hình ảnh từ máy quay video. MATLAB có vẻ là một giải pháp tốt đẹp vì việc chuyển đổi hình ảnh dễ dàng và tôi phải thực hiện một số xử lý hình ảnh sau đó. Tôi đã tìm kiếm một thời gian dài nhưng tôi vẫn chưa tìm thấy bất cứ điều gì làm việc.Chạy tập lệnh MATLAB từ python + pass args

Đã có một số cố gắng:


mlabwrap 1.1 - chạy một MATLAB-kịch bản:

Một kịch bản MATLAB như:

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

Bạn có thể chạy kịch bản này bằng cách sử dụng :

mlab.run('script.m') 

Nhưng, nơi để vượt qua một số đối số (thư mục, mô tả hình ảnh, v.v ...)? Tôi đã không tìm thấy bất cứ điều gì vì tài liệu nghèo nàn của mlabwraps. Tôi đã sử dụng mlab.lookfor ('chủ đề quan tâm') chức năng không thành công


mlabwrap 1.1 - Hình ảnh acqusisition bằng cách sử dụng chức năng mLab:

Ngay từ cái nhìn đầu tiên không có khả năng đọc một "đối tượng đầu vào video", không có các chức năng như:

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

python-m atlab cầu

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

Tôi đã có Windows7 64 Bit như hệ điều hành. Họ nói, nó chỉ hoạt động trên unix.


Nipype

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

Có vẻ là rất mới. Tôi havent đã cố gắng để cài đặt nó. Nó có vẻ là phù hợp với vấn đề của tôi nhưng không phải để cửa sổ, tôi đoán.


PyMAT

Không python 2.7 hỗ trợ


Vậy là có bất cứ ai có thể giúp tôi?

+0

Tôi chỉ cố gắng pymatlab, tôi có thể chạy nó trong cửa sổ với một số bản vá (http: // sourceforge .net/p/pymatlab/vé/1 /) nhưng trong trường hợp của tôi, tôi có vấn đề với các kích thước kiểu dữ liệu (cho đến nay nó chỉ hoạt động với các chuỗi) – lib

Trả lời

12

Trong khi tôi không quen thuộc với python-matlab-bridge, Nipype, hoặc PyMAT, tôi đã thực hiện một số tiền hợp lý của công việc với mlabwrap, và tôi sẽ cố gắng và trả lời câu hỏi của bạn liên quan đến gói đó .

Trước tiên, việc này sẽ dễ dàng hơn nhiều nếu bạn làm việc theo chức năng, thay vì tập lệnh.Hãy viết lại kịch bản Matlab của bạn như là một chức năng, trong myFunction.m như vậy:

function myFunction(v_input, directory, file_name) 

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

Sau đó bạn có thể gọi chức năng này từ python sử dụng mlabwrap.mlab, đi qua trong chuỗi cho các đối số chức năng. Tất cả các chức năng Matlab, bao gồm các hàm do người dùng định nghĩa, có sẵn dưới dạng các thuộc tính từ mô-đun mlabwrap.mlab.

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

mlabwrap sẽ chuyển đổi chuỗi thành định dạng có thể đọc được Matlab và chuyển chúng vào hàm của bạn làm đối số. Nếu tăng AttributeError, điều đó thường có nghĩa là chức năng của bạn không nằm trên đường dẫn Matlab. Bạn có thể thêm nó bằng lệnh:

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

Cũng giống như một lưu ý cảnh báo, mlabwrap sẽ tự động chuyển đổi một số loại đối số, chẳng hạn như chuỗi hoặc mảng NumPy qua lại giữa Python và Matlab. Tuy nhiên, có nhiều loại, chẳng hạn như cấu trúc Matlab và các lớp, mà nó không thể chuyển đổi. Trong trường hợp này, nó sẽ trả về một MLabObjectProxy từ chức năng Matlab. Các đối tượng proxy này không thể được thao tác trong Python hoặc được chuyển đổi thành các kiểu Python, nhưng có thể được truyền thành công qua mlabwrap vào các hàm Matlab khác. Thông thường, đối với các hàm có đầu ra phức tạp, tốt hơn là viết đầu ra đó vào một tệp trong hàm Matlab và nhập dữ liệu từ tệp ở phía Python. Chúc may mắn!

4
  1. Python/OpenCV: bạn có thể sử dụng giải pháp gốc để lấy hình ảnh từ thiết bị video của mình. Với OpenCV, bạn thậm chí có thể xử lý hình ảnh theo thời gian thực.
  2. matlab_wrapper: giả sử rằng bạn có chức năng MATLAB (không phải tập lệnh) chấp nhận một số tham số và trả về mảng hình ảnh, ví dụ: [img] = get_image(some_parameter), bạn có thể viết một cái gì đó như thế này:
matlab = matlab_wrapper.MatlabSession() 
img = matlab.workspace.get_image(some_parameter) 

Disclaimer: Tôi là tác giả của matlab_wrapper