转换大yml数据

时间:2015-07-23 09:58:12

标签: ios opencv yaml

还有其他方法/技巧可以将深度图存储在数据库中吗?基本上,我们试图存储300000双值。如果它有帮助我们可以将数组转换为NSMutableArray或类似的,以便我们可以序列化它。我还不知道怎么做。我试图找到一种方法将其转换为二进制文件而不是ASCII,但没有运气。

1 个答案:

答案 0 :(得分:2)

通过将原始二进制数据存储在BLOB中,可以节省大量内存。

如果没有矩阵的固定行和列,则可以在文件的开头放置行和列的两个整数。

我将添加一个关于如何保存和加载矩阵数据的简单示例,前面是行和列。

#include <opencv2/opencv.hpp>
#include <fstream>

using namespace cv;
using namespace std;

int main()
{
    Mat1d m = (Mat1d(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);
    Mat1d n;

    {
        ofstream ofs("test.bin", fstream::binary);
        ofs.write((char*)&m.rows, sizeof(int)); // Save rows
        ofs.write((char*)&m.cols, sizeof(int)); // Save cols
        ofs.write((char*)m.data, m.total()*sizeof(double)); // Save data
    }

    {
        ifstream ifs("test.bin", fstream::binary);
        int rows, cols;
        ifs.read((char*)&rows, sizeof(int)); // Load rows
        ifs.read((char*)&cols, sizeof(int)); // Load cols

        n = Mat1d(rows, cols); // Resize the matrix according to rows, cols
        ifs.read((char*)n.data, rows*cols*sizeof(double)); // Load data
    }

    // Now m and n are equal
    return 0;
}

如果您需要进一步压缩,可以使用gzstream

读取和写入流