显示激光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));

第二步转换成点云格式

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();

第三步初始化显示窗口

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

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

Mat point_cloud = Mat::zeros(3, point_num, CV_32FC3);//point cloud 赋值,每组第一个参数为x,第二个参数为y,第三个参数为zfor(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);

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

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);

第六步显示所有结果

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

最终显示结果如图

参考资料

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

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

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

使用opencv的viz模块显示3d点云相关推荐

  1. opencv生成3d模型_OpenCV4.2使用viz模块显示3D图像

    在OpenCV 3D视觉中如果需要显示三维数据或图像就需要用到viz模块,viz是OpenCV的3D显示模块,OpenCV官方release版本不包含此模块,需要我们自己cmake编译. Cmake步 ...

  2. 2 vtk 编译_OpenCV4.2使用viz模块显示3D图像

    在OpenCV 3D视觉中如果需要显示三维数据或图像就需要用到viz模块,viz是OpenCV的3D显示模块,OpenCV官方release版本不包含此模块,需要我们自己cmake编译. Cmake步 ...

  3. opencv中ArUco模块实践(1)

    论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章.公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信diany ...

  4. 超详细!使用OpenCV深度学习模块在图像分类下的应用实践

    专注计算机视觉前沿资讯和技术干货 微信公众号:极市平台 官网:https://www.cvmart.net/ 极市导读:本文来自6月份出版的新书<OpenCV深度学习应用与性能优化实践>, ...

  5. 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作

    文章目录 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作 一.基于c++的opencv 1.c++版本代码 2.代码结果展示 3.API构成及其参数说明 4.注意事项 ...

  6. 用opencv的dnn模块做yolov5目标检测

    最近在微信公众号里看到多篇讲解yolov5在openvino部署做目标检测文章,但是没看到过用opencv的dnn模块做yolov5目标检测的.于是,我就想着编写一套用opencv的dnn模块做yol ...

  7. Python,OpenCV骨架化图像并显示(skeletonize)

    Python,OpenCV骨架化图像并显示(skeletonize) 1. 效果图 2. 源码 参考: 1. 效果图 自己画一张图,原图 VS 骨架效果图如下: opencv logo原图 VS 骨架 ...

  8. OpenCV编译viz模块

    首先需要编译vtk.注意不要使用最新的master版本,而是使用tag分支下的最新版本.当前最新版本是https://gitlab.kitware.com/vtk/vtk/tree/v8.2.0版本. ...

  9. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十七:TFT模块 - 显示

    实验二十七:TFT模块 - 显示 所谓TFT(Thin Film Transistor)就是众多LCD当中,其中一种支持颜色的LCD,相较古老的点阵LCD(12864笑),它可谓高级了.黑金的TFT ...

最新文章

  1. ASP.NET + SqlSever 大数据解决方案 PK HADOOP
  2. 从0开始学Swift笔记整理(一)
  3. mysql二进制安装的优缺点_MYSQL的二进制安装
  4. java cursor 删除_使用CursorRecyclerAdatper在RecyclerView中删除和撤消
  5. Andorid ListView使用技巧
  6. inotify之文件系统事件监控使用入门
  7. 一个新时代的降临:智慧的医疗系统
  8. 课程《设计模式之美》笔记之关于面向对象与面向过程
  9. PVE安装Linux提示:error: /vmlinuz has invalid signature.
  10. Ubuntu系统安装字体方法
  11. [book]《超越感觉》
  12. ZJYYC LSH去年买了个表(也是LZY去年买了个表) DFS
  13. 专访美团外卖曹振团:天下武功唯快不破
  14. human3.6数据集
  15. win10如何打开计算机窗口,Win10如何打开运行窗口_Win10打开运行窗口快捷键-192路由网...
  16. wpf修改鼠标悬停效果
  17. 使用sql如何找出两张表中同一字段的不同值
  18. 【转】通信人必看之区别:S/N,C/N,Eb/N0,Ec/N0,Es/N0
  19. 为公司高管履职风险买单的董监高责任保险DO
  20. 丁鹿学堂:前端进阶学习vue3最新教程之vue的单文件组件深入理解

热门文章

  1. 开源项目 - 电子签章(移动端签名方案)
  2. 如何报考系统集成项目管理工程师?
  3. 手机版本android升级包下载,ColorOS8.0升级包下载安装-oppo手机系统ColorOS8.0正式版升级包下载 安卓版 v1.0- 游娱下载站...
  4. 06_03_SpringMVC 任务一: SpringMVC基本应用(SpringMVC请求与响应,进行日期转换工具类DateConverter)
  5. Web3+品牌的大杀器:DAO如何实现对传统品牌彻底的降维打击
  6. markdown 目录一键生成和转为 word 格式
  7. P1598 垂直柱状图
  8. hive表分区上传数据出现的一个问题及解决思路
  9. 第一次使用linux电脑,计算机基础与Linux初次亲密接触第一天(马哥)
  10. 对 IIC 总线的理解、调用函数以及常见面试问题