У меня есть векторный файл Mat, и я хочу сохранить его в txt файле. Каждый файл мата имеет размер 1x4500, и я получил всего 5000 векторов. Я попытался сохранить в txtfile вышеуказанный код:
void writeMatToFile(cv::Mat& m, const char* filename){
ofstream fout(filename);
for(int i=0; i<m.rows; i++){
for(int j=0; j<m.cols; j++){
fout<<m.at<float>(i,j)<<"\t";
}
fout<<endl;
}
fout.close();
}
В основном:
string file = "output.txt";
writeMatToFile(image,file.c_str());
Однако я получил необработанные ошибки исключения.
Напишите свои данные в двоичном режиме, используя свой собственный формат. Что-то вроде: mat_count|shape1|data1(row_first)|shape2...
std::fstream
будет выполнять более трудную работу для вас в текстовом режиме или в двоичном режиме. Вы должны попробовать оба увидеть окончательный размер.
Если ваши данные Mat - это что-то вроде uint8
, uint16
, двоичный режим будет намного лучше. Проблема с текстовым режимом заключается в том, что вам нужен разделитель для каждого отдельного файла, который добавляет дополнительные байты в ваш файл. Однако текстовый режим может сжимать данные: "1,5" 3 против 8 байтов (двойной).
Последнее, если вы хотите абсолютно файл в текстовом режиме, вы можете закрепить его в конце вашего процесса и посмотреть соотношение.