Эффективная запись чисел в файл CSV с использованием C ++

В настоящее время я использую Microsoft Kinect C ++ для получения данных скелетных координат (x, y, z) вместе с отметкой времени. Таким образом, это приводит к 61 столбцу данных на запись.

В настоящее время я занимаюсь настройкой файла csv с заголовками столбцов в начале метода main (). Затем я запускаю бесконечный цикл while для обработки данных каркаса кадра цвета / глубины и сохранения данных скелета в этот CSV-файл:
псевдо (потому что мой код слишком длинный):
основной метод () {
ostream myfile;
myfile.open (cvsfile);
настроить MyFile вещи;

...
while(1) {
get color frame ready;
get depth frame ready;
get skelframe() ready;

... other stuff that isn't related to the problem
}
end of main method}
...
skelframe() {
setsup skeleton frame and image;

...
get the 60 data points (x,y,z) of 20 joints;
ostream myfile;
myfile.open(csvfile)
myfile<<all 60 data points + time_stamp<<endl;
}

Поэтому в методе skelframe () я настраиваю скелет, а затем получаю координаты x, y, z. У меня есть пара вопросов:

  1. Должен ли я передать myfile в skelframe (), чтобы мне не приходилось выполнять настройку файла csv каждый раз, когда метод перебирает while (1)? Если так, я просто передаю это как skelframe (…, myfile), или есть какой-то другой причудливый способ сделать это?

  2. Когда я записываю все эти 60 точек данных в файл csv, существует ли эффективный способ сделать это, используя какой-нибудь буфер? Я подумал об использовании фиксированного размера массива 60 float + 1 строка с «,» s, а затем записал весь этот буфер в файл csv; посмотрел в stringstream, но не знаю, как реализовать. Нужна некоторая помощь с примером кода, потому что он довольно потерян и нуб на этой концепции кодирования более низкого уровня.

Спасибо!

-1

Решение

Запись в myfile не была узким местом, но я переключил код так, чтобы файл оставался открытым все время, пока моя программа не закончила работать.

Настоящим узким местом было то, что я сохранял изображения. Я изменил типы изображений с «.png» на «.bmp», что увеличило размер изображений, но увеличило скорость сохранения. Я также изменил поток сбора данных скелета с cv_8UC3 на CV_8UC1, что уменьшило количество датчиков в Microsoft Kinect, с которого собирались мои скелетные данные (ему действительно нужен только 1 поток данных).

Спасибо за помощь.

0

Другие решения


По вопросам рекламы [email protected]