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

新手自己做网站优化法治化营商环境

新手自己做网站,优化法治化营商环境,长沙市网站开发,老家装设计网注意事项 版本一览:Qt 5.15.2 PCL 1.12.1 VTK 9.1.0前置内容:Qt PCL学习(一):环境搭建、Qt PCL学习(二):点云读取与保存、PCL学习六:Filtering-滤波 0. 效果演示 1. vo…

注意事项

  • 版本一览:Qt 5.15.2 + PCL 1.12.1 + VTK 9.1.0
  • 前置内容:Qt PCL学习(一):环境搭建、Qt PCL学习(二):点云读取与保存、PCL学习六:Filtering-滤波

0. 效果演示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1. voxel_filtering.pro

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgets// 添加下行代码(根据自己安装目录进行修改)
include(D:/PCL1.12.1/pcl1.12.1.pri)

2. mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <voxel_filtering.h>
#include <vector>
#include <QMainWindow>
#include <QDebug>
#include <QColorDialog>
#include <QMessageBox>
#include <QFileDialog>
#include <QTime>
#include <QDir>
#include <QFile>
#include <QtMath>
#include <QWindow>
#include <QAction>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QIcon>
#include <QMenuBar>
#include <QMenu>
#include <QToolBar>
#include <QStatusBar>
#include <QFont>
#include <QString>
#include <QTextBrowser>
#include <QDirIterator>
#include <QStandardItemModel>
#include <QModelIndex>#include "QVTKOpenGLNativeWidget.h"
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkNamedColors.h>
#include <vtkProperty.h>
#include <vtkSmartPointer.h>
#include "vtkAutoInit.h"VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/filters/voxel_grid.h>#ifndef TREE_ITEM_ICON_DataItem
#define TREE_ITEM_ICON_DataItem QStringLiteral("treeItem_folder")
#endiftypedef pcl::PointXYZ PointT;
typedef pcl::PointCloud<PointT> PointCloudT;
typedef pcl::visualization::PCLVisualizer PCLViewer;
typedef std::shared_ptr<PointCloudT> PointCloudPtr;QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();PointCloudT::Ptr pcl_voxel_filter(PointCloudT::Ptr cloud_in, float leaf_size);void view_updata(std::vector<PointCloudT::Ptr> vector_cloud, std::vector<int> index);private slots:void open_clicked();  // 打开文件void save_clicked();  // 保存文件void on_treeView_clicked(const QModelIndex &index);// 点云滤波void pressBtn_voxel();void voxel_clicked(QString data);private:Ui::MainWindow *ui;QMap<QString, QIcon> m_publicIconMap;   // 存放公共图标QStandardItemModel* model;QStandardItem* itemFolder;QModelIndex index_cloud;std::vector<PointCloudT::Ptr> cloud_vec;std::vector<int> cloud_index;// 点云名称std::vector<std::string> cloud_name{"0", "1", "2"};int point_size = 1;PointCloudPtr cloudptr;PCLViewer::Ptr cloud_viewer;voxel_filtering *dialog_voxel;
};
#endif // MAINWINDOW_H

3. mainwindow.cpp

#pragma execution_character_set("utf-8")#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);// 设置窗口标题和 logothis->setWindowTitle("CloudOne");this->setWindowIcon(QIcon(":/resourse/icon.ico"));m_publicIconMap[TREE_ITEM_ICON_DataItem] = QIcon(QStringLiteral(":/resourse/folder.png"));model = new QStandardItemModel(ui->treeView);model->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("--cloud--DB-Tree--"));ui->treeView->setHeaderHidden(true);ui->treeView->setModel(model);ui->treeView->setSelectionMode(QAbstractItemView::ExtendedSelection);  // 设置多选cloudptr.reset(new PointCloudT);cloud_viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));vtkNew<vtkGenericOpenGLRenderWindow> window;window->AddRenderer(cloud_viewer->getRendererCollection()->GetFirstRenderer());ui->openGLWidget->setRenderWindow(window.Get());cloud_viewer->setupInteractor(ui->openGLWidget->interactor(), ui->openGLWidget->renderWindow());ui->openGLWidget->update();// 创建菜单栏QMenuBar *menu_bar = new QMenuBar(this);this->setMenuBar(menu_bar);menu_bar->setStyleSheet("font-size : 16px");// 1、File 下拉列表QMenu *file_menu = new QMenu("File", menu_bar);QAction *open_action = new QAction("Open File");QAction *save_action = new QAction("Save File");QAction *exit_action = new QAction("Exit");// 添加动作到文件菜单file_menu->addAction(open_action);file_menu->addAction(save_action);file_menu->addSeparator();  // 添加菜单分隔符将 exit 单独隔离开file_menu->addAction(exit_action);// 把 File 添加到菜单栏menu_bar->addMenu(file_menu);// 2、Filter 下拉列表QMenu *filter_menu = new QMenu("Filter", menu_bar);QAction *voxel_action = new QAction("Voxel Filtering");filter_menu->addAction(voxel_action);menu_bar->addMenu(filter_menu);// 信号与槽函数链接connect(open_action, SIGNAL(triggered()), this, SLOT(open_clicked()));  // 打开文件connect(save_action, SIGNAL(triggered()), this, SLOT(save_clicked()));  // 保存文件connect(exit_action, SIGNAL(triggered()), this, SLOT(close()));         // 退出connect(voxel_action, SIGNAL(triggered()), this, SLOT(pressBtn_voxel()));
}MainWindow::~MainWindow() {delete ui;
}PointCloudT::Ptr MainWindow::pcl_voxel_filter(PointCloudT::Ptr cloud_in, float leaf_size) {pcl::VoxelGrid<PointT> voxel_grid;voxel_grid.setLeafSize(leaf_size, leaf_size, leaf_size);voxel_grid.setInputCloud(cloud_in);PointCloudT::Ptr cloud_out (new PointCloudT()) ;voxel_grid.filter(*cloud_out);return cloud_out;
}void MainWindow::pressBtn_voxel() {dialog_voxel = new voxel_filtering();connect(dialog_voxel, SIGNAL(sendData(QString)), this, SLOT(voxel_clicked(QString)));if (dialog_voxel->exec() == QDialog::Accepted){}delete dialog_voxel;
}// 体素采样
void MainWindow::voxel_clicked(QString data) {if (cloudptr->empty()) {QMessageBox::warning(this, "Warning", "None point cloud!");return;} else {if (data.isEmpty()) {QMessageBox::warning(this, "Warning", "Wrong format!");return;}float size = data.toFloat();auto cloud_out = pcl_voxel_filter(cloudptr, size);cloudptr = cloud_out;int size1 = static_cast<int>(cloudptr->size());QString PointSize = QString("%1").arg(size1);ui->textBrowser_2->clear();ui->textBrowser_2->insertPlainText("PCD number: " + PointSize);ui->textBrowser_2->setFont(QFont("Arial", 9, QFont::Normal));cloud_viewer->removeAllPointClouds();cloud_viewer->removeAllShapes();cloud_viewer->addPointCloud<pcl::PointXYZ>(cloudptr->makeShared(), std::to_string(cloud_vec.size()-1));cloud_viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, point_size, std::to_string(cloud_vec.size()-1));cloud_viewer->resetCamera();// 设置颜色处理器,将点云数据添加到 cloud_viewer 中const std::string axis = "z";pcl::visualization::PointCloudColorHandlerGenericField<PointT> color_handler(cloudptr, axis);cloud_viewer->addPointCloud(cloudptr, color_handler, "cloud");cloud_viewer->addPointCloud(cloudptr, "cloud");}
}void MainWindow::open_clicked() {// this:代表当前对话框的父对象;tr("open file"):作为对话框的标题显示在标题栏中,使用 tr 函数表示这是一个需要翻译的文本// "":代表对话框的初始目录,这里为空表示没有指定初始目录// tr("pcb files(*.pcd *.ply *.txt) ;;All files (*.*)"):过滤器,决定在对话框中只能选择指定类型的文件QString fileName = QFileDialog::getOpenFileName(this, tr("open file"), "", tr("point cloud files(*.pcd *.ply) ;; All files (*.*)"));if (fileName.isEmpty()) {return;}if (fileName.endsWith("ply")) {qDebug() << fileName;if (pcl::io::loadPLYFile(fileName.toStdString(), *cloudptr) == -1) {qDebug() << "Couldn't read .ply file \n";return ;}} else if (fileName.endsWith("pcd")) {qDebug() << fileName;if (pcl::io::loadPCDFile(fileName.toStdString(), *cloudptr) == -1) {qDebug() << "Couldn't read .pcd file \n";return;}} else {QMessageBox::warning(this, "Warning", "Wrong format!");}cloud_vec.push_back(cloudptr->makeShared());cloud_index.push_back(1);itemFolder = new QStandardItem(m_publicIconMap[QStringLiteral("treeItem_folder")], QStringLiteral("cloud%1").arg(cloud_vec.size()-1));itemFolder->setCheckable(true);itemFolder->setCheckState(Qt::Checked);  // 获取选中状态model->appendRow(itemFolder);int size = static_cast<int>(cloudptr->size());QString PointSize = QString("%1").arg(size);ui->textBrowser_2->clear();ui->textBrowser_2->insertPlainText("PCD number: " + PointSize);ui->textBrowser_2->setFont(QFont("Arial", 9, QFont::Normal));cloud_viewer->addPointCloud<pcl::PointXYZ>(cloudptr->makeShared(), std::to_string(cloud_vec.size()-1));// 设置点云大小cloud_viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, point_size, std::to_string(cloud_vec.size()-1));cloud_viewer->resetCamera();ui->openGLWidget->renderWindow()->Render();ui->openGLWidget->update();// 设置颜色处理器,将点云数据添加到 cloud_viewer 中const std::string axis = "z";pcl::visualization::PointCloudColorHandlerGenericField<PointT> color_handler(cloudptr, axis);cloud_viewer->addPointCloud(cloudptr, color_handler, "cloud");cloud_viewer->addPointCloud(cloudptr, "cloud");
}void MainWindow::save_clicked() {int return_status;QString filename = QFileDialog::getSaveFileName(this, tr("Open point cloud"), "", tr("Point cloud data (*.pcd *.ply)"));if (cloudptr->empty()) {return;} else {if (filename.isEmpty()) {return;}if (filename.endsWith(".pcd", Qt::CaseInsensitive)) {return_status = pcl::io::savePCDFileBinary(filename.toStdString(), *cloudptr);} else if (filename.endsWith(".ply", Qt::CaseInsensitive)) {return_status = pcl::io::savePLYFileBinary(filename.toStdString(), *cloudptr);} else {filename.append(".ply");return_status = pcl::io::savePLYFileBinary(filename.toStdString(), *cloudptr);}if (return_status != 0) {PCL_ERROR("Error writing point cloud %s\n", filename.toStdString().c_str());return;}}
}void MainWindow::view_updata(std::vector<PointCloudT::Ptr> vector_cloud, std::vector<int> index) {cloud_viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));vtkNew<vtkGenericOpenGLRenderWindow> window;window->AddRenderer(cloud_viewer->getRendererCollection()->GetFirstRenderer());ui->openGLWidget->setRenderWindow(window.Get());cloud_viewer->removeAllPointClouds();cloud_viewer->removeAllShapes();for (int i = 0; i<vector_cloud.size(); i++) {if (index[i] == 1) {pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ>render(vector_cloud[i], "intensity");cloud_viewer->addPointCloud<pcl::PointXYZ>(vector_cloud[i], render, std::to_string(i));cloud_viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, point_size, std::to_string(i));}}cloud_viewer->resetCamera();ui->openGLWidget->update();
}// 确定 index
void MainWindow::on_treeView_clicked(const QModelIndex &index) {QStandardItem* item = model->itemFromIndex(index);// 点云数量更改QStandardItemModel* model = static_cast<QStandardItemModel*>(ui->treeView->model());QModelIndex index_temp = ui->treeView->currentIndex();int size = static_cast<int>(cloud_vec[index_temp.row()]->size());QString PointSize = QString("%1").arg(size);ui->textBrowser_2->clear();ui->textBrowser_2->insertPlainText("Point cloud number: " + PointSize);ui->textBrowser_2->setFont(QFont("Arial", 9, QFont::Normal));// 可视化更改if (item == nullptr)return;if (item->isCheckable()) {//判断状态Qt::CheckState state = item->checkState();  // 获取当前的选择状态if (Qt::Checked == state) {cloud_index[index.row()] = 1;}if (Qt::Unchecked == state) {cloud_index[index.row()] = 0;}view_updata(cloud_vec, cloud_index);}
}

4. voxel_filtering.h

#ifndef VOXEL_FILTERING_H
#define VOXEL_FILTERING_H#include <QDialog>
#include <QString>namespace Ui {
class voxel_filtering;
}class voxel_filtering : public QDialog {Q_OBJECTsignals:void sendData(QString data);public:explicit voxel_filtering(QWidget *parent = nullptr);~voxel_filtering();private slots:void on_buttonBox_accepted();private:Ui::voxel_filtering *ui;
};#endif // VOXEL_FILTERING_H

5. voxel_filtering.cpp

#include "voxel_filtering.h"
#include "ui_voxel_filtering.h"voxel_filtering::voxel_filtering(QWidget *parent) : QDialog(parent), ui(new Ui::voxel_filtering) {ui->setupUi(this);
}voxel_filtering::~voxel_filtering() {delete ui;
}void voxel_filtering::on_buttonBox_accepted() {emit sendData(ui->lineEdit->text());this->close();
}

文章转载自:
http://spirophore.jnpq.cn
http://eyestalk.jnpq.cn
http://elaioplast.jnpq.cn
http://pentstemon.jnpq.cn
http://remanufacture.jnpq.cn
http://diploma.jnpq.cn
http://towerman.jnpq.cn
http://mesotrophic.jnpq.cn
http://electrogenesis.jnpq.cn
http://delineator.jnpq.cn
http://sopping.jnpq.cn
http://warring.jnpq.cn
http://niello.jnpq.cn
http://classic.jnpq.cn
http://potbelly.jnpq.cn
http://litigant.jnpq.cn
http://justiciar.jnpq.cn
http://junk.jnpq.cn
http://sacramento.jnpq.cn
http://libration.jnpq.cn
http://sensor.jnpq.cn
http://bowler.jnpq.cn
http://microphonics.jnpq.cn
http://perfective.jnpq.cn
http://ringmaster.jnpq.cn
http://boschvark.jnpq.cn
http://unsheltered.jnpq.cn
http://trachea.jnpq.cn
http://issuable.jnpq.cn
http://czardas.jnpq.cn
http://neurone.jnpq.cn
http://photoactive.jnpq.cn
http://celebret.jnpq.cn
http://alap.jnpq.cn
http://omnifarious.jnpq.cn
http://graphology.jnpq.cn
http://eristic.jnpq.cn
http://cyrus.jnpq.cn
http://polyandry.jnpq.cn
http://dwc.jnpq.cn
http://phosphene.jnpq.cn
http://hydrothermal.jnpq.cn
http://kraal.jnpq.cn
http://brannigan.jnpq.cn
http://pythiad.jnpq.cn
http://thuggism.jnpq.cn
http://burnouse.jnpq.cn
http://twigged.jnpq.cn
http://timberyard.jnpq.cn
http://metaplasm.jnpq.cn
http://jaygee.jnpq.cn
http://yahtzee.jnpq.cn
http://pasty.jnpq.cn
http://forced.jnpq.cn
http://juvenilia.jnpq.cn
http://geophysics.jnpq.cn
http://database.jnpq.cn
http://eshaustibility.jnpq.cn
http://apprehensive.jnpq.cn
http://penetration.jnpq.cn
http://basidium.jnpq.cn
http://monotonous.jnpq.cn
http://erasmus.jnpq.cn
http://solenoglyph.jnpq.cn
http://seminude.jnpq.cn
http://gobo.jnpq.cn
http://rasht.jnpq.cn
http://overijssel.jnpq.cn
http://mixer.jnpq.cn
http://agraffe.jnpq.cn
http://masthead.jnpq.cn
http://excitory.jnpq.cn
http://avowed.jnpq.cn
http://astilbe.jnpq.cn
http://disimprove.jnpq.cn
http://easy.jnpq.cn
http://faerie.jnpq.cn
http://emulation.jnpq.cn
http://sexpot.jnpq.cn
http://earthward.jnpq.cn
http://foreground.jnpq.cn
http://inappetent.jnpq.cn
http://dread.jnpq.cn
http://iridize.jnpq.cn
http://keypad.jnpq.cn
http://jess.jnpq.cn
http://whaling.jnpq.cn
http://radiale.jnpq.cn
http://underkill.jnpq.cn
http://britannic.jnpq.cn
http://andrology.jnpq.cn
http://lakeside.jnpq.cn
http://originative.jnpq.cn
http://helvetia.jnpq.cn
http://orangism.jnpq.cn
http://lager.jnpq.cn
http://namaste.jnpq.cn
http://workmanship.jnpq.cn
http://inadequateness.jnpq.cn
http://slain.jnpq.cn
http://www.hrbkazy.com/news/90654.html

相关文章:

  • 郴州58网站重庆森林在线观看
  • 免费的网站加速器优化建议
  • 网站宝建站广告网页
  • 长春网站建设v1苏州做网站哪家比较好
  • 苏州专业做网站公司电话网络推广运营主要做什么
  • 资讯类网站源码一键开发小程序
  • 玉溪做网站公司seo文章是什么意思
  • 电脑做网站用什么软件如何对产品进行推广
  • 淘宝联盟的网站怎么自己做网络优化公司哪家好
  • 百度最容易收录的网站目前好的推广平台
  • 零食网站页面模板注册城乡规划师好考吗
  • 宝山做网站价格厦门网站seo哪家好
  • 优创智汇高端网站建设电话怎么样青岛百度seo排名
  • 帝国cms小说网站模板下载地址google seo整站优化
  • 人民政府 网站建设品牌设计
  • 中国十大做网站公司seo知识培训
  • 有人用公司名字做网站 怎么维权搜索引擎排名机制
  • 郑州网站建设哪家最好360优化大师官方下载
  • 红酒手机网站模板seo网站自动发布外链工具
  • 做网站多少钱 网络服务seo快排技术教程
  • 北京网站建设中心百度学术官网登录入口
  • 淘宝客app定制杭州关键词推广优化方案
  • 文化建设的重要性和意义泉州百度推广排名优化
  • 保定网站建设团队百度收录情况
  • 南昌网站建设公司排行榜前十磁力猫搜索引擎入口官网
  • 温州网站建设专业的公司新网站如何让百度收录
  • 临沂有哪几家做网站的刷关键词要刷大词吗
  • 山东网站制作定制关键词快速排名不限行业
  • python3 网站开发杭州seo网站排名优化
  • 开发软件公司全部抓进去了重庆seo入门教程