我必须从Matlab导出矩阵到OpenCV。我使用yaml格式,然后用cv::FileStorage modelFile
在OpenCV中读取文件,并将数据存储在cv::Mat
变量中。对于普通的2D矩阵,它工作得很好。但是,对于我的一个大的四维矩阵,我得到的错误是字符串太长。矩阵的大小为16|16|70409|8。
有人知道一个好的方法来存储它吗?也许只是格式问题。
代码是:
for i = 1:matrixSize(1)
for j=1:matrixSize(2)
fprintf( file, ' - [');
for a = 1:matrixSize(3)
for b = 1:matrixSize(4)
fprintf( file, '%.6f', A(i,j,a,b));
if(a ~= matrixSize(3))
fprintf( file, ',');
end
end
end
fprintf( file, ']n');
end
end
谢谢
我的解决方案是使用yaml代替,将模型保存为二进制格式,然后使用正常的读取函数读取。当然你必须知道每个矩阵的大小。
fileID = fopen(BinModel,'w');
fwrite(fileID,[size(model.nSegs),0,0],'uint32'); % size of the matrix
fwrite(fileID,model.nSegs,'uint8'); % matrix data
文件从1.4 GB缩小到200mb。
Saludo