Векторный мат в текстовом формате

0

У меня есть векторный файл 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());

Однако я получил необработанные ошибки исключения.

Теги:
opencv
vector
mat

1 ответ

1
Лучший ответ

Напишите свои данные в двоичном режиме, используя свой собственный формат. Что-то вроде: mat_count|shape1|data1(row_first)|shape2...

std::fstream будет выполнять более трудную работу для вас в текстовом режиме или в двоичном режиме. Вы должны попробовать оба увидеть окончательный размер.

Если ваши данные Mat - это что-то вроде uint8, uint16, двоичный режим будет намного лучше. Проблема с текстовым режимом заключается в том, что вам нужен разделитель для каждого отдельного файла, который добавляет дополнительные байты в ваш файл. Однако текстовый режим может сжимать данные: "1,5" 3 против 8 байтов (двойной).

Последнее, если вы хотите абсолютно файл в текстовом режиме, вы можете закрепить его в конце вашего процесса и посмотреть соотношение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню