이진 형식의 pcd 형식의 파일을 출력합니다

10694 단어 PCL점운pcd
업무 중에 클라우드 데이터를 처리할 필요가 있기 때문에 PCL 라이브러리를 넣었지만 boost와 vtk 등 수수께끼 같은 라이브러리에 대량으로 넣어야 하기 때문에 번역이 무거워서 곤란합니다.현재는 간단한 처리만 하기 때문에 처리 포인트 그룹을 결정하여 결과를 pcd 형식(point closud data 형식)으로 출력하고 pcd 뷰어(Cloud Compore;http://www.danielgm.net/cc/에서 봅니다.
pcd 형식:
http://pointclouds.org/documentation/tutorials/pcd_file_format.php
이걸 봤는데 간단한 형식이라 PCL 없이 pcd를 출력할 수 있어요.그러나 ASCII 형식이면 읽기가 느리기 때문에 이진 형식으로 출력된다.그럼에도 불구하고 헤드와 ASCII는 형식이 같고 데이터 부분에서 2진법으로 바뀐다.
다음은 pcd 파일로 출력할 수 있는 적당한 제작점 코드입니다.
c++-main.cpp
#include <stdio.h>
#include <vector>

struct pt_t {
    float x, y, z;
    pt_t() { ; }
    pt_t(float _x, float _y, float _z) {
        x = _x;
        y = _y;
        z = _z;
    }
};

#define RGB(r, g, b) ((int(r) << 16) + (int(g) << 8) + int(b) )


void main(){

    //***********************************************************
    // 適当な点群リストを作成
    std::vector<pt_t> pts;

    pt_t pt(7,23,35);
    float s = 10, b = 1.8, r = 20, dt = 0.0001;

    for (int i = 0; i < 500000; i++) {
        pt = pt_t(
            pt.x - dt * s*(pt.x - pt.y),
            pt.y + dt*(-pt.x*pt.z + r*pt.x - pt.y),
            pt.z + dt*(pt.x*pt.y - b*pt.z)
        );
        pts.push_back(pt);
    }
    //***********************************************************
    // pcdファイル(バイナリ形式)に出力
    FILE *fp = fopen("test.pcd", "wb");
    // ヘッダ
    fprintf(fp, "# .PCD v.7 - Point Cloud Data file format\n");
    fprintf(fp, "VERSION .7\nFIELDS x y z rgb\nSIZE 4 4 4 4\nTYPE F F F U\nCOUNT 1 1 1 1\n");
    fprintf(fp, "WIDTH %d\nHEIGHT 1\nVIEWPOINT 0 0 0 1 0 0 0\nPOINTS %d\nDATA binary\n", pts.size(), pts.size());
    // 中身をバイナリで書き込み
    for (int i = 0; i < pts.size(); i++) {
        // 適当に色を付ける
        unsigned int col = RGB(pts[i].z * 5, 128 + 3*pts[i].x, 128 + 3 * pts[i].y);
        float xyz[3] = { pts[i].x, pts[i].y, pts[i].z};
        fwrite( xyz, sizeof(float), 3, fp);
        fwrite(&col, sizeof(unsigned int), 1, fp);
    }
    fclose(fp);

}


50000점이 있는데 동작이 바삭바삭해요.
점 그룹의 커브 표현식은 다음을 참조합니다.
https://sites.google.com/site/cinderellajapan/shindererarekucha-1/ka-osu

좋은 웹페이지 즐겨찾기