ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PCL+Qt (1.1)自定义点云颜色并可视化

2020-12-22 20:00:33  阅读:1435  来源: 互联网

标签:Qt 自定义 viewer ui cloud PCL 点云 include QVTK


记录一下PCL与Qt结合的学习历程

代码实现

QVTK.h

#pragma once
#include <vtkAutoInit.h> 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>
#include <QtWidgets/QMainWindow>
#include "ui_QVTK.h"

class QVTK : public QMainWindow
{
    Q_OBJECT

public:
    QVTK(QWidget *parent = 0);
    ~QVTK();

private:
    Ui::QVTKClass ui;
    //------------点云数据存储---------------
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
    boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;

    //------------初始化vtk部件--------------
    void initialVtkWidget();

private slots:
    //-------------创建打开槽----------------
    void onOpen();
};


QVTK.cpp

#include "QVTK.h"
#include <QFileDialog>
#include <iostream>
#include <vtkRenderWindow.h>
QVTK::QVTK(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    //初始化
    initialVtkWidget();
    //连接信号和槽
    connect(ui.actionOpen, SIGNAL(clicked()), this, SLOT(onOpen()));
}

QVTK::~QVTK()
{

}

void QVTK::initialVtkWidget()
{
    cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
    viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));
    viewer->setBackgroundColor(0, 0, 0);  //设置背景颜色为黑色
    
    ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow());//****核心代码*****
    viewer->setupInteractor(ui.qvtkWidget->GetInteractor(), ui.qvtkWidget->GetRenderWindow());//******核心代码*******
 
    ui.qvtkWidget->update();
}

//---------------加载点云数据--------------------
void QVTK::onOpen()
{
    //只能打开PCD文件
    QString fileName = QFileDialog::getOpenFileName(this,
        tr("Open PointCloud"), ".",
        tr("Open PCD files(*.pcd)"));

    if (!fileName.isEmpty())
    {
        std::string file_name = fileName.toStdString();
   
            pcl::io::loadPCDFile(file_name, *cloud);
       
        //-----------------2---------------------
        //移除窗口点云(可实现添加多个点云)
        viewer->removeAllPointClouds();
        //设置点云颜色
        pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_color(cloud, 255, 0, 0);
        //点云颜色渲染	
        viewer->addPointCloud(cloud, cloud_color, "cloud");
        //设置点云大小
        viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "cloud");
        viewer->resetCamera();
        ui.qvtkWidget->update();

    }
}

main.cpp

#include "QVTK.h"
#include <QtWidgets/QApplication>
#include <vtkOutputWindow.h>
#include <QTextCodec>
int main(int argc, char *argv[])
{
    QTextCodec* code = QTextCodec::codecForName("GB2312");
    vtkOutputWindow::SetGlobalWarningDisplay(0);
    QApplication a(argc, argv);//定义并创建应用程序
    QVTK w;                    //定义并创建窗口
    w.show();                  //显示窗口
    return a.exec();           //应用程序运行
}

结果展示

在这里插入图片描述

标签:Qt,自定义,viewer,ui,cloud,PCL,点云,include,QVTK
来源: https://blog.csdn.net/qq_36686437/article/details/111565323

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有