使用OpenGL讀取off檔案建立深度學習資料集

2021-09-27 01:18:56 字數 3209 閱讀 1325

需要預裝opengl環境和pcl環境

整體思路是 opengl讀取off轉為obj檔案,然後vtk讀取obj檔案下取樣為點雲,運用pcl生成深度圖並儲存,**呼叫需要自行設定讀取路徑

#include

//#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//儲存深度影象

#include

#include

#include

#include

#include

#include

using namespace std;

using namespace pcl;

using namespace pcl:

:io;

using namespace pcl:

:console;

float vertex[

100000][

3];//讀取的off最多10萬點、面,無需要可以更改

int su***ce[

100000][

3];void

read_off_file

(string input)

//定義了obj,需與後面讀入的檔名保持一致

fout.

open

("test.obj");

//建立乙個中轉檔案

while

(fout.

fail()

)dowhile

(fin.

get()!=

'\n');

fin >> vertex_num >> su***ce_num >> other_num;

//cout << vertex_num;

for(i =

0; i < vertex_num; i++)}

for(i =

0; i < su***ce_num; i++)}

for(i =

0; i < vertex_num; i++

) fout.

put(

'\n');

} fout.

put(

'\n');

//注意控制換行

for(i =

0; i < su***ce_num; i++

) fout.

put(

'\n');

} fin.

close()

; fout.

close()

;//cout << "already covert to obj !" << endl;

}inline

double

uniform_deviate

(int seed)

inline

void

randompoint********

(float a1,

float a2,

float a3,

float b1,

float b2,

float b3,

float c1,

float c2,

float c3,

eigen:

:vector4f& p)

inline

void

randpsu***ce

(vtkpolydata * polydata, std:

:vector<

double

>

* cumulativeareas,

double totalarea, eigen:

:vector4f& p, bool calcnormal, eigen:

:vector3f& n)

randompoint********

(float

(a[0])

,float

(a[1])

,float

(a[2])

,float

(b[0])

,float

(b[1])

,float

(b[2])

,float

(c[0])

,float

(c[1])

,float

(c[2])

, p);}

void

uniform_sampling

(vtksmartpointer polydata, size_t n_samples, bool calc_normal, pcl:

:pointcloud:pointnormal>

& cloud_out)

cloud_out.points.

resize

(n_samples)

; cloud_out.width = static_cast:uint32_t>

(n_samples)

; cloud_out.height =1;

for(i =

0; i < n_samples; i++)}

}const

int default_number_samples =

100000

;//定義轉換引數

const

float default_leaf_size =

0.002f

;//需要設定輸出位置,預設在d:\git\regcnn\datadepth

//不需要預先在目錄下建立text.obj

//出現訪問衝突,多半陣列溢位

intmain

(int argc,

char

**ar**)

data_num++

;//到1資料夾}

fout1.

close()

;}

opengl讀取off檔案

1.定義結構體 typedef struct vertex vertex 定義點的結構體 typedef struct face 構造器 int nverts 麵中包含頂點個數 vertex verts 麵中包含的頂點陣列 float normal 3 存放法向量資訊 face 定義面的結構體 ty...

OpenGL讀取Obj模型檔案

想要順利讀取obj模型檔案,先要了解這種檔案的格式,obj檔案格式是非常簡單的。這種檔案以純文字的形式儲存了模型的頂點 法線和紋理座標和材質使用資訊。obj檔案的每一行,都有極其相似的格式。在obj檔案中,每行的格式如下 字首 引數1 引數2 引數3 其中,字首標識了這一行所儲存的資訊型別。引數則是...

opengl讀取OBJ模型檔案

要順利讀取 obj模型檔案,先要了解obj檔案的格式。obj檔案格式是非常簡單的,它以純文字的形式儲存了模型的頂點 法線和紋理座標和材質使用資訊。obj檔案的每行的格式如下 字首引數1引數 2引數3 其中,字首標識了這一行所儲存的資訊型別。引數則是具體的資料。obj檔案常見的的字首有 v表示本行指定...