1.说明

AABB——轴对齐包围盒:包围盒与坐标轴对齐

OBB——有向包围盒:根据目标本身几何形状设定包围盒的大小、方向

2.代码

int main()
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ> min_pt, max_pt;pcl::getMinMax3D(*cloud, min_pt, max_pt);/*OBB有向包围盒*/pcl::MomentOfInertiaEstimation <pcl::PointXYZRGBA> feature_extractor;feature_extractor.setInputCloud(cloud);feature_extractor.compute();std::vector <float> moment_of_inertia;std::vector <float> eccentricity;pcl::PointCloud<pcl::PointXYZ> OBB_min_pt;pcl::PointCloud<pcl::PointXYZ> OBB_max_pt;pcl::PointCloud<pcl::PointXYZ> OBB_cen_pt;Eigen::Matrix3f OBB_matrix_r;float major_value, middle_value, minor_value;Eigen::Vector3f major_vector, middle_vector, minor_vector;Eigen::Vector3f mass_center;feature_extractor.getMomentOfInertia(moment_of_inertia);feature_extractor.getEccentricity(eccentricity);feature_extractor.getOBB(OBB_min_pt, OBB_max_pt, OBB_cen_pt, OBB_matrix_r);feature_extractor.getEigenValues(major_value, middle_value, minor_value);feature_extractor.getEigenVectors(major_vector, middle_vector, minor_vector);feature_extractor.getMassCenter(mass_center);Eigen::Vector3f position(OBB_cen_pt.x, OBB_cen_pt.y, OBB_cen_pt.z);Eigen::Quaternionf quat(OBB_matrix_r);Eigen::Vector3f p1(OBB_min_pt.x, OBB_min_pt.y, OBB_min_pt.z);Eigen::Vector3f p2(OBB_min_pt.x, OBB_min_pt.y, max_pt.z - OBB_max_pt.z - OBB_cen_pt.z);Eigen::Vector3f p3(OBB_max_pt.x, OBB_min_pt.y, max_pt.z - OBB_max_pt.z - OBB_cen_pt.z);Eigen::Vector3f p4(OBB_max_pt.x, OBB_min_pt.y, OBB_min_pt.z);Eigen::Vector3f p5(OBB_min_pt.x, OBB_max_pt.y, OBB_min_pt.z);Eigen::Vector3f p6(OBB_min_pt.x, OBB_max_pt.y, max_pt.z - OBB_max_pt.z - OBB_cen_pt.z);Eigen::Vector3f p7(OBB_max_pt.x, OBB_max_pt.y, max_pt.z - OBB_max_pt.z - OBB_cen_pt.z);Eigen::Vector3f p8(OBB_max_pt.x, OBB_max_pt.y, OBB_min_pt.z);p1 = OBB_matrix_r * p1 + position;p2 = OBB_matrix_r * p2 + position;p3 = OBB_matrix_r * p3 + position;p4 = OBB_matrix_r * p4 + position;p5 = OBB_matrix_r * p5 + position;p6 = OBB_matrix_r * p6 + position;p7 = OBB_matrix_r * p7 + position;p8 = OBB_matrix_r * p8 + position;/*外包六面体顶点*/pcl::PointXYZ pt1(p1(0), p1(1), p1(2));pcl::PointXYZ pt2(p2(0), p2(1), p2(2));pcl::PointXYZ pt3(p3(0), p3(1), p3(2));pcl::PointXYZ pt4(p4(0), p4(1), p4(2));pcl::PointXYZ pt5(p5(0), p5(1), p5(2));pcl::PointXYZ pt6(p6(0), p6(1), p6(2));pcl::PointXYZ pt7(p7(0), p7(1), p7(2));pcl::PointXYZ pt8(p8(0), p8(1), p8(2));/*显示*/boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("cloud show"));int v1 = 0;viewer->createViewPort(0, 0, 1.0, 1.0, v1);viewer->setBackgroundColor(255,255, 255, v1);viewer->setBackgroundColor(255,255, 255);pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> raw(cloud, 0, 0, 0);viewer->addPointCloud(cloud, raw, "source cloud", v1);viewer->addLine<pcl::PointXYZ> (pt1, pt2, "line1");viewer->addLine<pcl::PointXYZ> (pt1, pt3, "line2");viewer->addLine<pcl::PointXYZ> (pt1, pt5, "line3");viewer->addLine<pcl::PointXYZ> (pt2, pt4, "line4");viewer->addLine<pcl::PointXYZ> (pt2, pt8, "line5");viewer->addLine<pcl::PointXYZ> (pt3, pt4, "line6");viewer->addLine<pcl::PointXYZ> (pt3, pt6, "line7");viewer->addLine<pcl::PointXYZ> (pt4, pt7, "line8");viewer->addLine<pcl::PointXYZ> (pt5, pt6, "line9");viewer->addLine<pcl::PointXYZ> (pt5, pt8, "line10");viewer->addLine<pcl::PointXYZ> (pt6, pt7, "line11");viewer->addLine<pcl::PointXYZ> (pt7, pt8, "line12");while (!viewer->wasStopped()){viewer->spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(10000));}system("pause");return 0;
}

点云外包矩形框(六面体)相关推荐

  1. open3d画3D矩形框

    在使用深度学习算法检测3维点云时候, 没有合适的可视化工具, 其实open3d是一个很好用的可视化工具 点云显示及连续帧动画显示可以参考上一篇文章 画3D矩形框,代码如下: def custom_dr ...

  2. 倾斜矩形框的IOU计算与Python实现

    参考倾斜矩形框的IOU计算与Python实现 - 云+社区 - 腾讯云 其算法流程大致如下: 给定两个倾斜的矩形 1. 首先设置点集: 2. 将两个矩形的交点均加入至 中: 3. 接着将矩形包含在中的 ...

  3. opencv c++ 寻找矩形框_基于Python的OpenCV人脸检测!OpenCV太强了!

    一.文章概述 本文将要讲述的是Python环境下如何用OpenCV检测人脸,本文的主要内容分为: 1.检测图片中的人脸 2.实时检测视频中出现的人脸 3.用运设备的摄像头实时检测人脸 二:准备工作 提 ...

  4. R语言ggplot2可视化分面图(facet_grid):去除分面图灰色矩形框以及框中的标签、Getting rid of facet_grid labels on those gray boxes

    R语言ggplot2可视化分面图(facet_grid):去除分面图灰色矩形框以及框中的标签.Getting rid of facet_grid labels on those gray boxes ...

  5. R语言层次聚类(hierarchical clustering):使用scale函数进行特征缩放、hclust包层次聚类(创建距离矩阵、聚类、绘制树状图dendrogram,在树状图上绘制红色矩形框)

    R语言层次聚类(hierarchical clustering):使用scale函数进行特征缩放.hclust包层次聚类(创建距离矩阵.聚类.绘制树状图dendrogram,在树状图上绘制红色矩形框) ...

  6. php图片加边框,php在图片上增加矩形框并加入水印

    php在图片下增加矩形框并加入水印 //统计混合汉字英文字符的实际字符数,只对gb2312码有效 function str_len($str){ $length=0; for($i=0;$i0x80) ...

  7. opencv 选择矩形框

    新版opencv c++和python都不支持选多个roi,可以连续选几次. 参数解读: selectROI(windowName, img, showCrosshair=None, fromCent ...

  8. matlab中给图像加几个矩形框_在图像中画矩形框(matlab)

    参考代码:https://github.com/cuijiaxun/FaceRecognitionByMatlab 中的LabelDetectWindow.m 在目标检测的时候,一般都需要用矩形框圈出 ...

  9. 手机上图片信息怎么拉一个矩形框_跟着黑鲨手机发布会学习PPT制作

    黑鲨手机,有可能有些人不知道 但是,小米手机大部分人应该知道 黑鲨是小米手机旗下高端手机,主打游戏手机 前几天,黑鲨手机举行了新品发布会 小编,也是观看了这场发布会 下面咱们来看看这场发布会PPT有哪 ...

  10. opencv方框内图像保存_opencv利用矩形框选中某一区域并保存为新图片

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 一.基本原理 Mat img= imread(image): Rect rect(50,20, 200, 50); ...

最新文章

  1. python自学入门教程-Python自学入门基础教程-数据类型
  2. HPC China2016全国高性能计算学术年会即将举行
  3. java实现套接字网络编程_Java网络编程(一)Socket套接字
  4. iOS开发-模板方法模式
  5. python中isinstance用法_Python内置isinstance函数详细介绍
  6. QPS、TPS、并发用户数、吞吐量的关系
  7. educoderpython答案顺序结构程序设计_答案汇总:土木机械类+计算机类
  8. treemap怎么保证有序_干货!208道面试题教你怎么通过面试!
  9. Facebook今年曾多次升级其安全和隐私控制
  10. 一些不起眼但非常有用的 Vim 命令
  11. 《scikit-learn》SVM(三)ROC曲线
  12. 「数据分析」Sqlserver中的窗口函数的精彩应用-问题篇
  13. php判断字段重复,删除完全重复和部分关键字段重复的记录
  14. Kotlin实战【二】Kotlin基本要素
  15. java篇 之 多态
  16. Linux 修改静态 IP
  17. latex下载安装记录
  18. 2.sklearn—评价指标大全(平均误差、均方误差、混淆矩阵、准确率、查全率、查准率、召回率、特异度,F1-score、G-mean、KS值、ROC曲线、AUC值、损失函数、结构风险最小)
  19. 自我怀疑的开发者:你够好吗?
  20. 关于Flutter空安全的一些使用经验和理解

热门文章

  1. Java面试题大全(2021版)
  2. 集线器(HUB)、交换机(Switch)、路由器(Router)
  3. 鸿蒙系统多屏协同,华为EMUI 11支持畅连、多屏协同等功能,与鸿蒙设备实现交互...
  4. 分析力学-清华大学基科班课件
  5. 【Git】3、创建Git版本库、配置Git仓库用户邮箱信息
  6. SPADE 阅读笔记
  7. Android OS历史版本
  8. 用shell脚本写的一个简单的计算器
  9. STAR法则修改简历
  10. Android动画定时lnvaliate,Android6.0 MTK6737 启动流程 · Younix’s Studio