1. 程式人生 > 其它 >Halcon快速讀取點雲的方法

Halcon快速讀取點雲的方法

技術標籤:Halcon學習3D機器學習

直接上程式碼:

dev_update_off ()

Filename := '1.txt'//點雲資料的名稱,.txt、.csv、.asc等格式的都可以

NumColumns := 3 //如果點雲的每行資料有3個數字就寫3 (只有xyz 的資料)

count_seconds (Then)
open_file (Filename, 'input', FileHandle)

VecOutLine.clear()
repeat
    fread_line (FileHandle, VecOutLine.at(VecOutLine.length())
, IsEOF) until (IsEOF) convert_vector_to_tuple (VecOutLine, P) P := P[0:|P|-2] P := split(P, ' ') stop () * //最重要的就是理解這些正則運算子代表的意思。 * ^ 匹配字串開頭 * \ 轉義字元 * \s 匹配空白字元 * * 允許前面的文字或 組0次或多次重複 * ()對子模式進行分組,並建立一個捕獲組 * . 匹配除換行符以外的任何字元 * + 允許1次或多次重複 * ? 允許1次或者多次重複 * $ 匹配字串的結尾(允許尾部換行符) Number := number(regexp_replace
(P,'^\\s*0*(.+?)\\s*\n*$', '$1')) P := HNULL IndexIsString := find(type_elem(Number),H_TYPE_STRING) if (IndexIsString > -1) throw ('could not convert "' + Number[IndexIsString] + '" to a number') endif X := Number[[0:NumColumns:|Number|-1]] Y := Number[[1:NumColumns:|Number|-1]] Z :
= Number[[2:NumColumns:|Number|-1]] Number := HNULL close_file (FileHandle) count_seconds (Now) DurationSeconds := Now - Then Msg := 'opening file ' + Filename + ' in ' + DurationSeconds + 's' dev_inspect_ctrl (Msg) gen_object_model_3d_from_points (X, Y, Z, ObjectModel3D) X := HNULL Y := HNULL Z := HNULL dev_get_window (WindowHandle) visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)

使用這個方法讀取點雲,測試過160萬個資料只需要30幾秒左右。