当前位置:   article > 正文

使用opencv的viz模块显示3d点云_opencv viz

opencv viz

显示激光3d点云一般使用pcl库,这里提供一种新的思路,使用opencv来做显示。

首先需要增加viz头文件

#include <opencv2/viz.hpp>

第一步读取点云数据

  1. int num_points;
  2. int pt_feature = 4;
  3. std::ifstream in("../0000.bin", std::ios::binary);
  4. if (!in.is_open()) {
  5. std::cerr << "Could not open the scan!" << std::endl;
  6. return 1;
  7. }
  8. in.seekg(0, std::ios::end);
  9. num_points = in.tellg() / (pt_feature * sizeof(float));
  10. in.seekg(0, std::ios::beg);
  11. std::vector<float> pts(pt_feature * num_points);
  12. in.read((char*)&pts[0], pt_feature * num_points * sizeof(float));

第二步转换成点云格式

  1. std::vector<LidarPoint>lidar_pts;
  2. for(int i = 0; i<num_points;i++){ // 解析激光点云数据
  3. LidarPoint lidar_pt;
  4. lidar_pt.fX = pts[i*4+0];
  5. lidar_pt.fY = pts[i*4+1];
  6. lidar_pt.fZ = pts[i*4+2]+2;
  7. lidar_pt.nIntensity = pts[i*4+3];
  8. lidar_pt.ntype = POINT_TYPE::PT_UNKNOWN;
  9. lidar_pts.push_back(lidar_pt);
  10. }
  11. int point_num = lidar_pts.size();

第三步初始化显示窗口

  1. viz::Viz3d window("window");
  2. window.setBackgroundColor();

第四步转换点云格式并显示

  1. Mat point_cloud = Mat::zeros(3, point_num, CV_32FC3);
  2. //point cloud 赋值,每组第一个参数为x,第二个参数为y,第三个参数为z
  3. for(int row = 0; row < point_num; row++) {
  4. point_cloud.ptr<Vec3f>(0)[row][0] = lidar_pts[row].fX;
  5. point_cloud.ptr<Vec3f>(0)[row][1] = lidar_pts[row].fY;
  6. point_cloud.ptr<Vec3f>(0)[row][2] = lidar_pts[row].fZ;
  7. }
  8. cv::viz::WCloud cloud(point_cloud, viz::Viz3d::Color::white()); // 显示点云和颜色
  9. window.showWidget("cloud",cloud);

第五步构造直角坐标系和目标框

  1. window.showWidget("Coordinate", viz::WCoordinateSystem()); // 显示坐标
  2. viz::WCube cube_widget(Point3f(51.0,-1.5,0.0), Point3f(55.0,0.5,1.5), true, viz::Color::red());
  3. cube_widget.setRenderingProperty(viz::LINE_WIDTH, 1.0); // 设置线条粗细
  4. window.showWidget("Cube Widget", cube_widget);

第六步显示所有结果

  1. while (!window.wasStopped())
  2. {
  3. window.spinOnce(1, false);
  4. }

最终显示结果如图

参考资料

OpenCV 3D显示Viz模块_Asimov_Liu的博客-CSDN博客

 Opencv中的WMesh - 凤凰_1 - 博客园

OpenCV的viz库学习(一)_负壹的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/119728
推荐阅读
相关标签
  

闽ICP备14008679号