QT运行pcl处理程序很慢的问题

最近在做pcl库相关的东西,自己利用pcl库做项目的时候发现代码运行的特别慢,经过排查,可以有两种解决方案。
第一种读取二进制pcd文件的效率会比ascii格式的pcd文件效率高很多
第二种是从debug模式切换到release模式,release模式的运行效率也比debug模式的运行效率高出30-40倍。
以下是我运行的代码。利用统计滤波对pcd文件进行滤波。
代码:

#include "mainwindow.h"
#include <QApplication>
#include <QDir>
#include <QTime>

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/filters/statistical_outlier_removal.h>

int main(int argc, char *argv[])
{
//    QApplication a(argc, argv);
//    QDir::setCurrent(a.applicationDirPath());
//    MainWindow w;
//    w.show();

//    return a.exec();
      QTime time;
      time.start();

      pcl::PCDReader reader;//pcd文件读取对象
      pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);//输入点云对象指针
      pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);//滤波点云对象指针
      //pcl::visualization::CloudViewer viewer("input cloud viewer");//点云显示对象
      pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;    //创建滤波对象

      if(reader.read("./pcd/defects.pcd",*cloud) == -1)
      {
          qDebug() << "pcd read failed";
          return -1;
      }
      else
      {
          std::cerr << "cloud filtering before:" << std::endl;
          std::cerr << *cloud << std::endl;
          //viewer.showCloud(cloud,"cloud");//可视化输入点云

          //统计滤波
          sor.setInputCloud(cloud);//设置输入点云
          sor.setMeanK(35);//每个点要分析的邻近点数为35个
          sor.setStddevMulThresh(1.8);//标准差乘数设置为1,距离阈值 = mean + stddev_mult * stddev
          sor.filter(*cloud_filtered);

          std::cerr <<"cloud after filtering:" << std::endl;
          std::cerr << *cloud_filtered;

          pcl::PCDWriter writer;
          writer.write("./pcd/defects_inliers.pcd",*cloud_filtered,false);//保存滤波之后的点

          sor.setNegative(true);
          sor.filter(*cloud_filtered);
          writer.write("./pcd/defects_outliers.pcd",*cloud_filtered,false);
          //viewer.showCloud(cloud_filtered);
          qDebug() << time.elapsed()/1000 << "s";

//          while(!viewer.wasStopped())
//          {

//          }
      }

      return 0;
}

debug模式运行时间:为259s。
在这里插入图片描述
release模式运行时间:为7s。
在这里插入图片描述
这里我更改了运行模式,然后运行时间就提高了30多倍。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值