使用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));
第二步转换成点云格式
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点云相关推荐
- opencv生成3d模型_OpenCV4.2使用viz模块显示3D图像
在OpenCV 3D视觉中如果需要显示三维数据或图像就需要用到viz模块,viz是OpenCV的3D显示模块,OpenCV官方release版本不包含此模块,需要我们自己cmake编译. Cmake步 ...
- 2 vtk 编译_OpenCV4.2使用viz模块显示3D图像
在OpenCV 3D视觉中如果需要显示三维数据或图像就需要用到viz模块,viz是OpenCV的3D显示模块,OpenCV官方release版本不包含此模块,需要我们自己cmake编译. Cmake步 ...
- opencv中ArUco模块实践(1)
论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章.公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信diany ...
- 超详细!使用OpenCV深度学习模块在图像分类下的应用实践
专注计算机视觉前沿资讯和技术干货 微信公众号:极市平台 官网:https://www.cvmart.net/ 极市导读:本文来自6月份出版的新书<OpenCV深度学习应用与性能优化实践>, ...
- 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作
文章目录 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作 一.基于c++的opencv 1.c++版本代码 2.代码结果展示 3.API构成及其参数说明 4.注意事项 ...
- 用opencv的dnn模块做yolov5目标检测
最近在微信公众号里看到多篇讲解yolov5在openvino部署做目标检测文章,但是没看到过用opencv的dnn模块做yolov5目标检测的.于是,我就想着编写一套用opencv的dnn模块做yol ...
- Python,OpenCV骨架化图像并显示(skeletonize)
Python,OpenCV骨架化图像并显示(skeletonize) 1. 效果图 2. 源码 参考: 1. 效果图 自己画一张图,原图 VS 骨架效果图如下: opencv logo原图 VS 骨架 ...
- OpenCV编译viz模块
首先需要编译vtk.注意不要使用最新的master版本,而是使用tag分支下的最新版本.当前最新版本是https://gitlab.kitware.com/vtk/vtk/tree/v8.2.0版本. ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十七:TFT模块 - 显示
实验二十七:TFT模块 - 显示 所谓TFT(Thin Film Transistor)就是众多LCD当中,其中一种支持颜色的LCD,相较古老的点阵LCD(12864笑),它可谓高级了.黑金的TFT ...
最新文章
- ASP.NET + SqlSever 大数据解决方案 PK HADOOP
- 从0开始学Swift笔记整理(一)
- mysql二进制安装的优缺点_MYSQL的二进制安装
- java cursor 删除_使用CursorRecyclerAdatper在RecyclerView中删除和撤消
- Andorid ListView使用技巧
- inotify之文件系统事件监控使用入门
- 一个新时代的降临:智慧的医疗系统
- 课程《设计模式之美》笔记之关于面向对象与面向过程
- PVE安装Linux提示:error: /vmlinuz has invalid signature.
- Ubuntu系统安装字体方法
- [book]《超越感觉》
- ZJYYC LSH去年买了个表(也是LZY去年买了个表) DFS
- 专访美团外卖曹振团:天下武功唯快不破
- human3.6数据集
- win10如何打开计算机窗口,Win10如何打开运行窗口_Win10打开运行窗口快捷键-192路由网...
- wpf修改鼠标悬停效果
- 使用sql如何找出两张表中同一字段的不同值
- 【转】通信人必看之区别:S/N,C/N,Eb/N0,Ec/N0,Es/N0
- 为公司高管履职风险买单的董监高责任保险DO
- 丁鹿学堂:前端进阶学习vue3最新教程之vue的单文件组件深入理解
热门文章
- 开源项目 - 电子签章(移动端签名方案)
- 如何报考系统集成项目管理工程师?
- 手机版本android升级包下载,ColorOS8.0升级包下载安装-oppo手机系统ColorOS8.0正式版升级包下载 安卓版 v1.0- 游娱下载站...
- 06_03_SpringMVC 任务一: SpringMVC基本应用(SpringMVC请求与响应,进行日期转换工具类DateConverter)
- Web3+品牌的大杀器:DAO如何实现对传统品牌彻底的降维打击
- markdown 目录一键生成和转为 word 格式
- P1598 垂直柱状图
- hive表分区上传数据出现的一个问题及解决思路
- 第一次使用linux电脑,计算机基础与Linux初次亲密接触第一天(马哥)
- 对 IIC 总线的理解、调用函数以及常见面试问题