Если вы не знаете количество кадров априори, не пытайтесь развернуть mxArray в C. Это не удобно.Вы были уже близко к началу.Все ваши проблемы могут быть решены с помощью:
engEvalString(engine, "your command here")
Подробнее здесь .
Самый простой подход выглядит примерно так:
engPutVariable(engine, "mat", mat);
engEvalString("frames{length(frames)+1} = mat;");
Не делайте это именно так, это иллюстрация и будет очень медленной.Намного лучше предварительно выделить, скажем, 1000 кадров, а затем увеличить его еще на 1000 (или более подходящее число), когда это необходимо.Еще лучше не использовать массивы клеток, которые работают медленно.Вместо этого вы можете использовать трехмерный массив, например:
frames = zeros(13,13,1000);
frames(:,:,i) = mat;
i = i + 1;
Опять же, предварительно распределить в блоках.Вы поняли идею.Если вам действительно нужно быть быстрым, вы можете построить 3D-массивы в C и отправить их в MATLAB, когда они заполнятся.