在c++下,.pts文件中存儲了landmark點的座標,其內容如下所示:
version: 1
n_points: 68
{
446.000 91.000
449.459 119.344
450.957 150.614
460.552 176.986
471.486 202.157
488.087 226.842
506.016 246.438
524.662 263.865
553.315 271.435
578.732 266.260
599.361 248.966
...
}
想要通過c++讀取其中的點的座標,需要用到fscanf函數,以及正則表達式。
整體代碼如下:
char filename[100];
sprintf(filename, "300W/01_Indoor/indoor_%03d.pts", i);
FILE *f = fopen(filename,"r+");
for (int k = 0; k<3; k++) fscanf(f, "%*[^\n]%*c");//跳過前三行,用到了正則表達式
Mat1f temp(2 * 68, 1);//點雲存儲在一個float類型的向量中。
for (int j = 0; j<68; j++){
fscanf(f, "%f", &temp(2 * j, 0));//依次讀取每一行中的float數值,並存儲下來
fscanf(f, "%f", &temp(2 * j + 1, 0));
}
fclose(f);
參考:
跳過某一行(百度知道)
補充:
關於文件讀取:如果一個存儲數據的文件裏有亂碼,那麼在讀取該文件時,讀到亂碼之後,所有的數據都有可能改變。這點十分值得注意。