"Too Many Output Arguments" Error Calling imwrite from Python engine

1 visualización (últimos 30 días)
E Swan
E Swan el 12 de Jun. de 2015
Comentada: E Swan el 16 de Jun. de 2015
I have a MATLAB function get_mask defined like so:
function M = get_mask(path)
I = imread(path);
M = im2bw(I, graythresh(I));
end
The image I'm passing in is a 16bpp grayscale TIFF LZW compressed image. I call it from Python using the Python engine:
eng = matlab.engine.start_matlab()
result = eng.get_mask('some_path');
I then pass the result to imwrite:
eng.imwrite(result, r'ml_result.tif', nargout=0)
eng.quit()
The call to imwrite takes ages (3-4 minutes, a separate issue...) before failing with a "Too Many Output Arguments" error. I double checked the type of 'result' and it is indeed a 1040x1392 logical as I expected. However, if I do this instead:
eng.imwrite(matlab.logical([[0, 1, 0], [1, 0, 1]]), r'C:\ml_result.tif', nargout=0)
It works, no problem. I don't understand what the difference is here.

Respuestas (2)

E Swan
E Swan el 12 de Jun. de 2015
And, I just figured it out on my own. I lied a bit in my example (shame on me) as I was actually creating one engine instance to call get_mask, stopping it, and then creating another for the call to imwrite. Apparently that is a no-no and, for whatever reason, resulted in this error.
It still takes a while to run, but that's a separate topic.

Bo Li
Bo Li el 15 de Jun. de 2015
By default, the number of output arguments is 1 in Python Engine. nargout needs to specified if more or less results are expected:
  1 comentario
E Swan
E Swan el 16 de Jun. de 2015
Thanks. As you can see in the example, I did set nargout to 0. The problem was using data obtained from one instance of the engine and passing it to another after quitting the first.

Iniciar sesión para comentar.

Categorías

Más información sobre Call Python from MATLAB en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by