当前位置: 首页 > backend >正文

pcl_案例2 叶片与根茎的分离

要做的是这个样子的

2_1,

        1)随机先下采样

        2)对下采样点云计算obb矩阵

         3)将点云旋转到00点

        4)点云沿x正方向平移

        5)直通滤波去除花底


int main(int argc, char** argv)
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);// 加载bun0.pcd文件,加载的文件在 PCL的测试数据中是存在的 pcl::io::loadPLYFile("D:\\Desktop\\pacl_learning\\case2plant\\plant.ply", *cloud);//先下采样,数据太大,计算obb矩阵会特别慢。cloud_down只用于伴随计算pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_down = down_sample<pcl::PointXYZ>(cloud,0.02);cout << cloud_down->points.size() << endl;//1,先进行转正pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_trans0 (new pcl::PointCloud<pcl::PointXYZ>);Eigen::Affine3f trans_matrix = get_trans_obb<pcl::PointXYZ>(cloud_down);pcl::transformPointCloud(*cloud_down, *cloud_down, trans_matrix);//移动palant全部到x的00点以上pcl::PointXYZ p_min, p_max;pcl::getMinMax3D(*cloud_down, p_min, p_max);Eigen::Affine3f trans_x = Eigen::Affine3f::Identity();//过0点后往下移了高度的0.2float plant_height = p_max.x - p_min.x;float x_trans = 0 - p_min.x + 0.2;trans_x.translate(Eigen::Vector3f (x_trans,0, 0) );pcl::transformPointCloud(*cloud_down, *cloud_down, trans_x);//把整个点云移过来,并记住这个trans_all,以后可以旋转回去Eigen::Affine3f trans_all = trans_x * trans_matrix;pcl::transformPointCloud(*cloud, *cloud_trans0, trans_all);//show_pointcloud<pcl::PointXYZ>(cloud_trans0, 0.1);//去掉根部pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_trans1(new pcl::PointCloud<pcl::PointXYZ>);pcl::PassThrough<pcl::PointXYZ> pass;pass.setInputCloud(cloud_trans0);pass.setFilterLimits(0, (p_max.x - p_min.x) * 0.7+0.2);pass.setFilterFieldName("x");pass.filter(*cloud_trans1);cout << "花的高度在x轴是——" << plant_height << endl;show_pointcloud<pcl::PointXYZ>(cloud_trans1, 1,0);
}

http://www.xdnf.cn/news/18947.html

相关文章:

  • 机器视觉学习-day09-图像矫正
  • Day30 多线程编程 同步与互斥 任务队列调度
  • leetcode_73 矩阵置零
  • 【LLM】Transformer模型中的MoE层详解
  • vue布局
  • 架构设计——云原生与分布式系统架构
  • Android中设置RecyclerView滑动到指定条目位置
  • 搜维尔科技核心产品矩阵涵盖从硬件感知到软件渲染的全产品供应链
  • 万博智云联合华为云共建高度自动化的云容灾基线解决方案
  • 【Python开源环境】Anaconda/Miniconda
  • 【数据结构与算法】(LeetCode)141.环形链表 142.环形链表Ⅱ
  • 重置 Windows Server 2019 管理员账户密码
  • 深入理解QLabel:Qt中的文本与图像显示控件
  • 国产的服务器
  • 机器学习回顾(一)
  • Day16_【机器学习—KNN算法】
  • 小白入门:支持深度学习的视觉数据库管理系统
  • 解构与重构:“真人不露相,露相非真人” 的存在论新解 —— 论 “真在” 的行为表达本质
  • c++ 观察者模式 订阅发布架构
  • Visual Scope (Serial_Digital_Scope V2) “串口 + 虚拟示波器” 工具使用记录
  • JavaScript中的BOM,DOM和事件
  • Spring Boot 实战:接入 DeepSeek API 实现问卷文本优化
  • 底层音频编程的基本术语 PCM 和 Mixer
  • 数据分析学习笔记4:加州房价预测
  • 腕上智慧健康管家:华为WATCH 5与小艺的智美生活新范式
  • 音频转PCM
  • curl、python-requests、postman和jmeter的对应关系
  • AR培训系统:油气行业的安全与效率革新
  • frp 一个高性能的反向代理服务
  • PAT 1086 Tree Traversals Again