2015-07-23 2 views
0

Есть ли другой способ/трюк для хранения карты глубины в базе данных? В основном мы пытаемся сохранить 300000 двойных значений. Если это помогает, мы можем преобразовать массив в NSMutableArray или подобный, чтобы мы могли его сериализовать. Я еще не знаю, как это сделать. Я попытался найти способ конвертировать его в двоичный файл вместо ASCII, но пока не повезло.конвертировать большие данные yml

ответ

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

+0

Спасибо, не могли бы вы объяснить, второе решение – user1931943

+0

@ user1931943 вы имеете в виду, когда у вас нет фиксированных строк и COLS? – Miki

+0

Правильно, когда у меня нет фиксированных строк/столбцов. – user1931943

Смежные вопросы