face alignment讀取.pts文件

在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);

參考:
跳過某一行(百度知道)

補充:
關於文件讀取:如果一個存儲數據的文件裏有亂碼,那麼在讀取該文件時,讀到亂碼之後,所有的數據都有可能改變。這點十分值得注意。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章