問題描述
還有其他方法/技巧可以將深度圖存儲在數據庫中嗎?基本上,我們正在嘗試存儲 300000 個雙精度值.如果它有幫助,我們可以將數組轉換為 NSMutableArray 或類似的,以便我們可以序列化它.我還不知道該怎么做.我試圖找到一種方法將其轉換為二進制文件而不是 ASCII 但還沒有運氣.
There is any other way/trick to store the depth map in the database? Basically, we are trying to store 300000 double values. If it helps we can convert the array into a NSMutableArray or similar so that we can serialize it. I don’t know yet how to do it. I tried to find a way to convert it to a binary file instead of ASCII but no luck yet.
推薦答案
您可以通過將原始二進制數據存儲在 BLOB 中來節省大量內存.
You can save a lot of memory by storing the raw binary data in a BLOB.
如果您的矩陣沒有固定的行和列,您可以在文件的開頭放置行和列的兩個整數.
If you don't have fixed rows and cols of your matrix, you can put at the beginning of the file two integers for rows and cols.
我將添加一個關于如何保存和加載矩陣數據的簡單示例,前面是行和列.
I'll add a simple example on how to save and load the data of matrix, preceded by rows and cols.
#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
If you need further compression you can read and write the stream using gzstream
這篇關于轉換大 yml 數據的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!