使用C ++有效地将浮动文件写入CSV文件

时间:2014-08-06 22:06:03

标签: c++ csv file-io processing-efficiency

我目前正在使用Microsoft Kinect C ++来获取骨架坐标数据(x,y,z)以及time_stamp。因此,每次写入可转换为61列数据。

我目前正在做的是在main()方法的开头设置带有列标题的csv文件。然后我运行一个无限循环来处理颜色/深度帧骨架数据并将骨架数据保存到这个csv文件中: 伪(因为我的代码太长了):     main方法(){     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(),这样每次方法循环while(1)时我都不必为csv文件设置?如果是这样,我只是将它作为skelframe(...,myfile)传递,还是有其他一些奇特的方式来做这个?

  2. 当我将所有这60个数据点写入csv文件时,是否有一种有效的方法可以使用某种缓冲区来完成此操作?我想过使用固定数组大小的60个浮点数+ 1个字符串和“,”然后将整个缓冲区写入csv文件;看了一下stringstream,但不知道如何实现。需要一些帮助w /示例代码cuz相当丢失和noob在这个较低级别的编码概念。

  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

写入myfile不是瓶颈,但我改变了代码,以便文件始终保持打开状态,直到我的程序运行完毕。

真正的瓶颈是我正在保存图像。我改变了&#34; .png&#34;的图像类型。到&#34; .bmp&#34;,这增加了图像的大小,但提高了保存的速度。我还将骨架的数据采集流从cv_8UC3更改为CV_8UC1,这减少了我的骨架数据收集的Microsoft Kinect中的传感器数量(它实际上只需要1个数据流)。

感谢您的帮助。