opencv の viz モジュールを使用して 3D 点群を表示する

レーザー 3D 点群の表示には PCL ライブラリを使用するのが一般的ですが、ここでは新しい考え方として opencv を使用して表示します。

まず、viz ヘッダー ファイルを追加する必要があります

#include <opencv2/viz.hpp>

最初のステップは点群データを読み取ることです

int num_points;

int pt_feature = 4;

std::ifstream in("../0000.bin", std::ios::binary);

if (!in.is_open()) {

    std::cerr << "Could not open the scan!" << std::endl;

    return 1;

}

in.seekg(0, std::ios::end);

num_points = in.tellg() / (pt_feature * sizeof(float));

in.seekg(0, std::ios::beg);

std::vector<float> pts(pt_feature * num_points);

in.read((char*)&pts[0], pt_feature * num_points * sizeof(float));

2 番目のステップは、点群形式に変換することです。

std::vector<LidarPoint>lidar_pts;

for(int i = 0; i<num_points;i++){ // 解析激光点云数据

    LidarPoint lidar_pt;

    lidar_pt.fX = pts[i*4+0];

    lidar_pt.fY = pts[i*4+1];

    lidar_pt.fZ = pts[i*4+2]+2;

    lidar_pt.nIntensity = pts[i*4+3];

    lidar_pt.ntype = POINT_TYPE::PT_UNKNOWN;

    lidar_pts.push_back(lidar_pt);

}

int point_num = lidar_pts.size();

3 番目のステップは、表示ウィンドウを初期化することです。

viz::Viz3d window("window");

window.setBackgroundColor();

4 番目のステップは、点群形式を変換して表示することです。

Mat point_cloud = Mat::zeros(3, point_num, CV_32FC3);

//point cloud 赋值,每组第一个参数为x,第二个参数为y,第三个参数为z

for(int row = 0; row < point_num; row++) {

    point_cloud.ptr<Vec3f>(0)[row][0] = lidar_pts[row].fX;

    point_cloud.ptr<Vec3f>(0)[row][1] = lidar_pts[row].fY;

    point_cloud.ptr<Vec3f>(0)[row][2] = lidar_pts[row].fZ;

}

cv::viz::WCloud cloud(point_cloud, viz::Viz3d::Color::white()); // 显示点云和颜色

window.showWidget("cloud",cloud);

5 番目のステップは、デカルト座標系とターゲット ボックスを構築することです。

window.showWidget("Coordinate", viz::WCoordinateSystem()); // 显示坐标

viz::WCube cube_widget(Point3f(51.0,-1.5,0.0), Point3f(55.0,0.5,1.5), true, viz::Color::red());

cube_widget.setRenderingProperty(viz::LINE_WIDTH, 1.0); // 设置线条粗细

window.showWidget("Cube Widget", cube_widget);

6 番目のステップではすべての結果が表示されます

while (!window.wasStopped())

{
    
    window.spinOnce(1, false);

}

最終的な表示結果を図に示します。

参考文献

OpenCV 3D ディスプレイ Viz module_Asimov_Liu のブログ-CSDN ブログ

 Opencv の WMesh - Phoenix_1 - 博客园

OpenCV の viz ライブラリ学習 (1) - Negative One ブログ - CSDN ブログ

おすすめ

転載: blog.csdn.net/weixin_41691854/article/details/127265911