[python][pcl]python-pcl案例之平面模型分割

news/2023/12/5 23:56:10

测试环境:

pcl==1.12.1

python-pcl==0.3.1

python==3.7

代码:

# -*- coding: utf-8 -*-
# http://pointclouds.org/documentation/tutorials/planar_segmentation.php#planar-segmentationimport pcl
import numpy as np
import randomdef main():#   pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);##   // Fill in the cloud data#   cloud->width  = 15;#   cloud->height = 1;#   cloud->points.resize (cloud->width * cloud->height);##   // Generate the data#   for (size_t i = 0; i < cloud->points.size (); ++i)#   {#     cloud->points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);#     cloud->points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);#     cloud->points[i].z = 1.0;#   }##   // Set a few outliers#   cloud->points[0].z = 2.0;#   cloud->points[3].z = -2.0;#   cloud->points[6].z = 4.0;###cloud = pcl.PointCloud()points = np.zeros((15, 3), dtype=np.float32)RAND_MAX = 1024.0for i in range(0, 15):points[i][0] = 1024 * random.random() / (RAND_MAX + 1.0)points[i][1] = 1024 * random.random() / (RAND_MAX + 1.0)points[i][2] = 1.0points[0][2] = 2.0points[3][2] = -2.0points[6][2] = 4.0cloud.from_array(points)#   std::cerr << "Point cloud data: " << cloud->points.size () << " points" << std::endl;#   for (size_t i = 0; i < cloud->points.size (); ++i)#     std::cerr << "    " << cloud->points[i].x << " "#                         << cloud->points[i].y << " "#                         << cloud->points[i].z << std::endl;#print('Point cloud data: ' + str(cloud.size) + ' points')for i in range(0, cloud.size):print('x: ' + str(cloud[i][0]) + ', y : ' +str(cloud[i][1]) + ', z : ' + str(cloud[i][2]))#   pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);#   pcl::PointIndices::Ptr inliers (new pcl::PointIndices);#   // Create the segmentation object#   pcl::SACSegmentation<pcl::PointXYZ> seg;#   // Optional#   seg.setOptimizeCoefficients (true);#   // Mandatory#   seg.setModelType (pcl::SACMODEL_PLANE);#   seg.setMethodType (pcl::SAC_RANSAC);#   seg.setDistanceThreshold (0.01);##   seg.setInputCloud (cloud);#   seg.segment (*inliers, *coefficients);#### http://www.pcl-users.org/pcl-SACMODEL-CYLINDER-is-not-working-td4037530.html# NG?# seg = cloud.make_segmenter()# seg.set_optimize_coefficients(True)# seg.set_model_type(pcl.SACMODEL_NORMAL_PLANE)# seg.set_method_type(pcl.SAC_RANSAC)# seg.set_distance_threshold(0.01)# indices, coefficients = seg.segment()seg = cloud.make_segmenter_normals(ksearch=50)seg.set_optimize_coefficients(True)seg.set_model_type(pcl.SACMODEL_NORMAL_PLANE)seg.set_method_type(pcl.SAC_RANSAC)seg.set_distance_threshold(0.01)seg.set_normal_distance_weight(0.01)seg.set_max_iterations(100)indices, coefficients = seg.segment()#   if (inliers->indices.size () == 0)#   {#     PCL_ERROR ("Could not estimate a planar model for the given dataset.");#     return (-1);#   }#   std::cerr << "Model coefficients: " << coefficients->values[0] << " "#                                       << coefficients->values[1] << " "#                                       << coefficients->values[2] << " "#                                       << coefficients->values[3] << std::endl;###if len(indices) == 0:print('Could not estimate a planar model for the given dataset.')exit(0)print('Model coefficients: ' + str(coefficients[0]) + ' ' + str(coefficients[1]) + ' ' + str(coefficients[2]) + ' ' + str(coefficients[3]))#   std::cerr << "Model inliers: " << inliers->indices.size () << std::endl;#   for (size_t i = 0; i < inliers->indices.size (); ++i)#     std::cerr << inliers->indices[i] << "    " << cloud->points[inliers->indices[i]].x << " "#                                                << cloud->points[inliers->indices[i]].y << " "#                                                << cloud->points[inliers->indices[i]].z << std::endl;###print('Model inliers: ' + str(len(indices)))for i in range(0, len(indices)):print(str(indices[i]) + ', x: ' + str(cloud[indices[i]][0]) + ', y : ' +str(cloud[indices[i]][1]) + ', z : ' + str(cloud[indices[i]][2]))if __name__ == "__main__":# import cProfile# cProfile.run('main()', sort='time')main()

运行结果:

Point cloud data: 15 points
x: 0.4073253273963928, y : 0.18234382569789886, z : 2.0
x: 0.6126348376274109, y : 0.07198140025138855, z : 1.0
x: 0.20239822566509247, y : 0.7896735072135925, z : 1.0
x: 0.019813423976302147, y : 0.8002557158470154, z : -2.0
x: 0.560012936592102, y : 0.6460093855857849, z : 1.0
x: 0.11512751877307892, y : 0.29834282398223877, z : 1.0
x: 0.5930672883987427, y : 0.4660494923591614, z : 4.0
x: 0.326516330242157, y : 0.2036980241537094, z : 1.0
x: 0.0727834403514862, y : 0.2508666515350342, z : 1.0
x: 0.6440120935440063, y : 0.9432345628738403, z : 1.0
x: 0.3259447515010834, y : 0.9963557124137878, z : 1.0
x: 0.7400149703025818, y : 0.9620276689529419, z : 1.0
x: 0.16831167042255402, y : 0.2292098104953766, z : 1.0
x: 0.69353848695755, y : 0.7191517353057861, z : 1.0
x: 0.30966588854789734, y : 0.47624409198760986, z : 1.0
Model coefficients: 0.7691919207572937 -0.6329861283302307 -0.08759189397096634 0.18918786942958832
Model inliers: 4
5, x: 0.11512751877307892, y : 0.29834282398223877, z : 1.0
6, x: 0.5930672883987427, y : 0.4660494923591614, z : 4.0
8, x: 0.0727834403514862, y : 0.2508666515350342, z : 1.0
9, x: 0.6440120935440063, y : 0.9432345628738403, z : 1.0
 


http://www.ppmy.cn/news/681631.html

相关文章

JS知识点汇总(一)--数组常用方法

1. Javscript数组的常用方法有哪些&#xff1f; 1、操作方法 数组基本操作可以归纳为 增、删、改、查。 1. 增 下面前三种是对原数组产生影响的增添方法&#xff0c;第四种则不会对原数组产生影响 push()unshift()splice()concat() push() push()方法接收任意数量的参数&…

ArcMap发布arcgis sever缓存瓦片服务

1.全能电子地图下载瓦片地图 2.地图拼接 acrgis sever缓存瓦片 下载完成的文件目录 3.arcMap添加数据 连接本地文件 这一步有坑&#xff0c;一定要加载到瓦片最外层目录&#xff0c;否则看不到图层文件。 找到图层数据&#xff0c;点击添加 添加数据完成&#xff0c;开始发布服…

2017年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——纯享题目版

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &#x1f495;兴趣爱好&#xff1a;b站天天刷&…

创维电视酷开系统安装第三方软件 如创维电视安装电视家3.0

创维电视酷开系统安装第三方软件具体步骤如下&#xff1a; 以安装电视家为例&#xff1a; 1、需要用到U盘。到电视家官网下载电视版电视家的apk文件到U盘&#xff0c;把U盘插入到电视机上。 2、打开电视&#xff0c;按遥控器上的菜单&#xff0c;进入【设置】界面&#xff0…

估值近百亿,“创维三把手”酷开科技能否顺利赶考?

你会用大屏电视去看影片吗&#xff1f; 电视&#xff0c;似乎已经沦为妈妈辈们消磨空闲时光的好帮手&#xff0c;渐渐地在年轻人的世界里消失。然而&#xff0c;当越来越多巨头竞相推出大屏电视&#xff0c;办公室会议更频繁地采用大屏投影时&#xff0c;似乎彰显着大屏电视时…

OTT反超PC,酷开拯救不了创维

智能家居早有雏形&#xff0c;随着家电市场逐渐看到扩张的天花板&#xff0c;资本市场推动智能化与家电结合&#xff0c;形成独特的场景化家居市场&#xff0c;也就是当前的智能家居场景化风口。 在家庭场景中&#xff0c;从开门、开灯、开热水器等等动作&#xff0c;都需要人…

酷开系统 | 酷开科技创新突围,夯实品牌实力

过去的一年&#xff0c;在全球经济增长放缓的背景下&#xff0c;电视市场步入存量时代&#xff0c;规模持续下滑&#xff0c;与之相反的却是消费者对于电视大屏的需求越来越多样化了。为了满足消费者多样化的需求&#xff0c;OTT行业内估值近百亿的独角兽公司酷开科技在技术上持…

酷开电视adb

一、关于ADB 1、adb概念&#xff1a; adb的全称为Android Debug Bridge&#xff0c;就是起到调试桥的作用。通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序&#xff0c;说白了就是debug工具。adb的工作方式比较特殊&#xff0c;采用监听Socket TCP 5554等端口的方式…

npm link 与 pnpm link 的用法

npm link 不加参数的&#xff0c;是在全局安装当前执行命令目录的包&#xff0c;就是含有package.json文件夹。加了redis参数的是在其他目录或者包中安装redis这个包,redis也是已经被软连接的全局的。注意&#xff0c;package-name取自package.Json&#xff0c;而不是从目录名…

前缀例题(一维二维)

​作者&#xff1a;小妮无语 专栏&#xff1a;暑假基础集训营 &#x1f6b6;‍♀️✌️道阻且长&#xff0c;不要放弃✌️&#x1f3c3;‍♀️ 目录 一维前缀和 二维前缀和 例题1&#xff1a;最大子矩阵 例题2&#xff1a; 激光炸弹 一维前缀和 本题唯一要注意的是数据范…

磁盘容量计算

磁盘存储运算 磁盘上的数据都存放于磁道上。磁道就是磁盘上的一组同心圆&#xff0c;其宽度与磁头的宽度相同。为了避免减少干扰&#xff0c;磁道与磁道之间要保持一定的距离(inter-track gap)&#xff0c;沿磁盘半径方向&#xff0c;单位长度内磁道的数目称之为道密度(道/英寸…

容量(capacity)

容量(capacity) 语法: size_type capacity();capacity()函数返回在重新申请更多的空间前字符串可以容纳的字符数. 这个数字至少与 size()一样大.

存储器容量计算及相关概念

存储容量的定义 &#xff1a;存储容量是指主存能存放二进制代码的总位数 存储器容量计算公式&#xff1a; 按位计算 (b) &#xff1a; 存储容量 存储单元个数 x 存储字长 按字节计算(B)&#xff1a; 存储容量 存储单元个数 x 存储字长 / 8 存储单元 &#…

计算机存储器之容量计算

文章目录 1 概述1.1 主存储器图示1.2 专业术语解释 2 容量计算2.1 计算公式2.2 网工软考真题 3 扩展3.1 单位换算 1 概述 #mermaid-svg-DEFvKL89wLzAU54K {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-DEFvKL89wLz…

存储器容量计算

存储器容量计算 存储容量是指存储器可以容纳的二进制信息量。笼统来说就是能储存一个多少位数的二进制数。 例&#xff1a; 地址编号从80000H到BFFFFH且按字节编址的内存容量为&#xff08;&#xff09;KB 80000H到BFFFFH 的编码单元共3FFFFH 3FFFF换算为二进制为218 对应容…

SAP BW/HANA 数据源创建示例

操作实例 在ABAP中创建&#xff1a; 1、RSO2——创建数据源——明明规则&#xff1a;ZZZ/BZ/HY_PP/MM/SD/FI_数据表名 如果表数据中存在货币或者数量关联不是本表需要走RFC提取 根据RFC提取&#xff1a; 函数组—ZBW_GROUP_FI 创建RFC&#xff1a;ZBW_FUN_ZCOT007E 代码&a…

白盒测试入门概念

白盒测试的度量 根据待测产品的内部实现细节来设计测试用例白盒测试的执行手段是可以涵盖单元测试、集成测试使用代码覆盖率作为白盒测试的主要度量指标 代码覆盖率常见概念 语句覆盖&#xff1a;每行代码都要覆盖至少一次判定覆盖&#xff1a;判定表达式的真假至少覆盖一次…

迅捷PDF编辑器如何编辑PDF文字图文教程

现在很多办公用户会使用PDF文档来传输信息&#xff0c;相应的&#xff0c;我们也需要对PDF文档进行编辑。PDF编辑器的出现刚好可以帮助我们解决这个问题&#xff0c;那么&#xff0c;如何使用迅捷PDF编辑器来编辑文字呢&#xff1f; 一、安装并运行迅捷PDF编辑器&#xff0c;…

有没有人用过迅捷PDF转换器?文件转换效果怎么样?

pdf文件打不开没关系&#xff0c;pdf文件无法正常编辑没关系&#xff0c;因为我们总能在网上找到各种各样的小工具&#xff0c;改变pdf文件的格式&#xff0c;让它们变成可以被读取&#xff0c;可以被编辑的格式&#xff0c;例如今天要为大家介绍的迅捷PDF转换器&#xff0c;就…

【software推荐】录屏强推captura,pdf处理强推迅捷

1、录屏 之前用过迅捷录屏&#xff0c;可以免费录制2分钟&#xff0c;这两分钟还带它的水印&#xff0c;坑。 后面入坑&#xff1a;captura啦&#xff01; Captura是一款免费开源的屏幕录制工具&#xff0c;它能够将屏幕上的任意区域、窗口录制成视频&#xff0c;可以选择是…
最新文章