我目前正在使用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坐标。我有几个问题:
我应该将myfile传递给skelframe(),这样每次方法循环while(1)时我都不必为csv文件设置?如果是这样,我只是将它作为skelframe(...,myfile)传递,还是有其他一些奇特的方式来做这个?
当我将所有这60个数据点写入csv文件时,是否有一种有效的方法可以使用某种缓冲区来完成此操作?我想过使用固定数组大小的60个浮点数+ 1个字符串和“,”然后将整个缓冲区写入csv文件;看了一下stringstream,但不知道如何实现。需要一些帮助w /示例代码cuz相当丢失和noob在这个较低级别的编码概念。
谢谢!
答案 0 :(得分:0)
写入myfile不是瓶颈,但我改变了代码,以便文件始终保持打开状态,直到我的程序运行完毕。
真正的瓶颈是我正在保存图像。我改变了&#34; .png&#34;的图像类型。到&#34; .bmp&#34;,这增加了图像的大小,但提高了保存的速度。我还将骨架的数据采集流从cv_8UC3更改为CV_8UC1,这减少了我的骨架数据收集的Microsoft Kinect中的传感器数量(它实际上只需要1个数据流)。
感谢您的帮助。