使用c++高效地将浮点数写入CSV文件

Writing Floats to a CSV File Using C++ Efficiently

本文关键字:CSV 文件 浮点数 c++ 高效 使用      更新时间:2023-10-16

我目前使用Microsoft Kinect c++来获取骨骼坐标数据(x,y,z)以及时间戳。因此,这意味着每次写入需要61列数据。

我目前正在做的是在main()方法的开头设置csv文件w/列标题。然后我运行一个无限while循环来处理颜色/深度框架数据,并将框架数据保存到这个csv文件中:伪(因为我的代码太长):主方法(){上ostream myfile;myfile.open (cvsfile);

...
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个浮点数+1字符串与","s,然后将整个缓冲区写入csv文件;查看stringstream,但不知道如何实现。需要一些示例代码的帮助,因为在这个较低层次的编码概念上相当迷失和新手。

谢谢!

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

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

谢谢你的帮助