PCL配置记录

PCL配置记录

1. Windows10+vs2019+pcl

win10+vs2019+pcl 1.11.1

1.下载与安装

https://github.com/PointCloudLibrary/pcl/releases
在这里插入图片描述
)

双击exe安装

注意:

(在这里插入图片描述
)

解压

“pcl-1.11.0-pdb-msvc2019-win64.zip”,将解压得到的文件夹中的内容添加“…\PCL 1.11.0\bin”中
在这里插入图片描述

添加环境变量

在这里插入图片描述

2.VS2019中的配置

在VS中新建一个空项目,编译环境改为X64,Release版本。

视图->其他窗口->属性管理器

新建一个项目属性表

在这里插入图片描述

双击打开,进入 VC++目录->包含目录,添加:

D:\PCL 1.11.1\include\pcl-1.11
D:\PCL 1.11.1\3rdParty\Boost\include\boost-1_74
D:\PCL 1.11.1\3rdParty\Eigen\eigen3
D:\PCL 1.11.1\3rdParty\Qhull\include
D:\PCL 1.11.1\3rdParty\VTK\include\vtk-8.2
D:\PCL 1.11.1\3rdParty\FLANN\include
C:\Program Files\OpenNI2\Include

VC++目录->库目录,添加:

D:\PCL 1.11.1\lib
D:\PCL 1.11.1\3rdParty\Boost\lib
D:\PCL 1.11.1\3rdParty\FLANN\lib
D:\PCL 1.11.1\3rdParty\Qhull\lib
D:\PCL 1.11.1\3rdParty\VTK\lib
C:\Program Files\OpenNI2\Lib

C/C++—>预处理器—>预处理器定义 添加

BOOST_USE_WINDOWS_H
NOMINMAX
_CRT_SECURE_NO_DEPRECATE

C/C++ ->所有选项->SDL检查 改为

链接器—>输入—>附加的依赖项

PCL 1.11.0\3rdParty\VTK\libPCL 1.11.0\lib这两个文件夹下的lib文件的release版本添加到附加依赖项中

为了方便,通过批处理把文件夹中的文件名写入到一个txt中:

//win+r调出“运行”窗口并输出cmd
//(填自己的路径)
cd /d D:\programming\PCL 1.11.0\lib 
dir /b *.lib *>0.txt

注意,这个0.txt中会把0.txt和一个pkgconfig文件夹也写进去,复制到附加依赖项之前,应该把这两个删掉,否则会报错

现在该txt中包含了release和debug两种版本的库,如下图,需要将release版本单独分离出来,对于相同功能的库,两个版本是挨着的,可以用程序把他们分别写到两个txt中。

#include <iostream>
#include <string>
#include <fstream> 
#include <iostream>
using namespace std;int main()
{ifstream txtfile;//打开读取的文件ofstream txt01;//保存的文件ofstream txt02;//保存的文件string temp;int index = 0;//用于判断奇偶txtfile.open("0.txt", ios::in);while (!txtfile.eof())            // 若未到文件结束一直循环{getline(txtfile, temp);//一行一行读取if (index%2==0)//判断除以2的余数,即为奇偶的判断{txt01.open("1.txt", ios::app);txt01 << temp;txt01 << endl;txt01.close();}else{txt02.open("2.txt", ios::app);txt02 << temp;txt02 << endl;txt02.close();}index++;}txtfile.close();   //关闭文件txtfile.close();txt01.close();txt02.close();return 0;
}

3.测试代码

#include<pcl/visualization/cloud_viewer.h>#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>//pcd 读写类相关的头文件。
#include<pcl/io/ply_io.h>
#include<pcl/point_types.h> //PCL中支持的点类型头文件。using namespace std;
int split_file();int  main(int argc, char** argv)
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new 	pcl::PointCloud<pcl::PointXYZ>);char strfilepath[256] = "rabbit.pcd";if (-1 == pcl::io::loadPCDFile(strfilepath, *cloud)) //打开点云文件{std::cout << "error input!" << std::endl;return -1;}std::cout << cloud->points.size() << std::endl;pcl::visualization::CloudViewer viewer("Cloud Viewer");     //创建viewer对象viewer.showCloud(cloud);system("pause");return 0;
}

4.bugFix

C4996 ‘pcl::visualization::PointCloudColorHandler::getColor’: use getColor() without parameters instead (It will be removed in PCL 1.12) PCL_demo D:\PCL 1.11.1\include\pcl-1.11\pcl\visualization\point_cloud_color_handlers.h 109

在这里插入图片描述

在代码最前面加上 #pragma warning(disable:4996)

2. Win10+Clion+QT

下载与安装与上一章一致,主要在Clion配置。

环境:win10+clion+opencv+qt 64位

1.配置clion

注意选择64位,因为PCL版本下载的是64位的

在这里插入图片描述

2.CmakeList

cmake_minimum_required(VERSION 3.17)
project(project_name)set(CMAKE_CXX_STANDARD 14)add_executable(project_name main.cpp)find_package(PCL 1.11 REQUIRED)
FIND_PACKAGE(PCL REQUIRED COMPONENTS common io visualization )
find_package(OpenCV REQUIRED)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})target_link_libraries(project_name ${OpenCV_LIBS} ${PCL_LIBRARIES})

3.测试代码

#include <iostream>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include<opencv2/opencv.hpp>
using namespace cv;int
main (int argc, char** argv)
{Mat img = imread("test.png");imshow("test",img);waitKey(0);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new  pcl::PointCloud<pcl::PointXYZ>);char strfilepath[256] = "rabbit.pcd";if (-1 == pcl::io::loadPCDFile(strfilepath, *cloud)) //打开点云文件{std::cout << "error input!" << std::endl;return -1;}std::cout << cloud->points.size() << std::endl;pcl::visualization::CloudViewer viewer("Cloud Viewer");     //创建viewer对象viewer.showCloud(cloud);getchar();return 0;
}

4.QT 配置

QtCreator 与UIC配置

File->settings

在这里插入图片描述

在这里插入图片描述

配置好后就可以在Tools->external Tools 里找到qtcreator了

也可以右击.ui文件,找到external Tools ,就可以用UIC编译Ui文件了

CmakeList
cmake_minimum_required(VERSION 3.17)
project(project_name)set(CMAKE_CXX_STANDARD 14)set(CMAKE_INCLUDE_CURRENT_DIR  ON)
#打开Qt的MOC功能和UI文件处理功能
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
#查找Qt的库
find_package(Qt5Widgets)
add_executable(project_name main.cpp mainwindow.h )find_package(PCL 1.11 REQUIRED)
FIND_PACKAGE(PCL REQUIRED COMPONENTS common io visualization )
find_package(OpenCV REQUIRED)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})target_link_libraries(project_name ${OpenCV_LIBS} ${PCL_LIBRARIES} Qt5::Widgets)
BugFix

https://blog.csdn.net/jh1513/article/details/52262115

3. QT中VTK的配置

1.VTK重新编译

主要过程见下图链接

https://blog.csdn.net/weixin_43981402/article/details/84845274

下载VTK源码:

https://vtk.org/download/

在这里插入图片描述

Cmake编译

设置好两个空目录,一是install 一是prefix
在这里插入图片描述

cmake里勾上Qt相关的选项,点击Configure,之后点击Generate,后面就可以在install文件夹里找到sln文件,用vs2019打开,生成解决方案即可。

注意,编译的时候选择release x64

在这里插入图片描述

之后前往vtk-prefix文件夹,用里面的文件替换掉${PCL_LIB}\3rdParty\VTK\下的所有文件。

此外,将${PCL_LIB}\3rdParty\VTK\plugins\designer下的QVTKWidgetPlugin.dll文件复制到

${QTLIB}\5.13.2\msvc2017_64\plugins\designer中,就可以在QTdesigner中看到QVTKWidget了。

2.CmakeList

cmake_minimum_required(VERSION 3.17)
project(Mysqlserver_socket)set(CMAKE_CXX_STANDARD 14)set(CMAKE_INCLUDE_CURRENT_DIR  ON)
#打开Qt的MOC功能和UI文件处理功能
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
#查找Qt的库
find_package(Qt5Widgets)find_package(VTK)
if(VTK_FOUND)include(${VTK_USE_FILE})
else(VTK_FOUND)message(FATAL_ERROR "cannot bulid without vtk")
endif(VTK_FOUND)set(VTK_LIBS ${VTK_LIBRARIES})find_package(PCL 1.11 REQUIRED)
FIND_PACKAGE(PCL REQUIRED COMPONENTS common io visualization )
find_package(OpenCV REQUIRED)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})add_executable(Mysqlserver_socket main.cpp mainwindow.h )
target_link_libraries(Mysqlserver_socket ${OpenCV_LIBS} ${PCL_LIBRARIES} ${VTK_LIBS} Qt5::Widgets)

3.测试代码

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include <QFileDialog>
#include<iostream>
#include <vtkRenderWindow.h>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);initialVtkWidget();connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(pushButtonTest()));
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::pushButtonTest() {//只能打开PCD文件QString fileName = QFileDialog::getOpenFileName(this,tr("Open PointCloud"), ".",tr("Open PCD files(*.pcd)"));if (!fileName.isEmpty()){std::string file_name = fileName.toStdString();//sensor_msgs::PointCloud2 cloud2;pcl::PCLPointCloud2 cloud2;//pcl::PointCloud<Eigen::MatrixXf> cloud2;Eigen::Vector4f origin;Eigen::Quaternionf orientation;int pcd_version;int data_type;unsigned int data_idx;int offset = 0;pcl::PCDReader rd;rd.readHeader(file_name, cloud2, origin, orientation, pcd_version, data_type, data_idx);if (data_type == 0){pcl::io::loadPCDFile(fileName.toStdString(), *cloud);}else if (data_type == 2){pcl::PCDReader reader;reader.read<pcl::PointXYZ>(fileName.toStdString(), *cloud);}viewer->updatePointCloud(cloud, "cloud");viewer->resetCamera();ui->qvtkWidget->update();}
}
void MainWindow::initialVtkWidget() {cloud.reset (new pcl::PointCloud<pcl::PointXYZ>);viewer.reset (new pcl::visualization::PCLVisualizer ("viewer", false));viewer->addPointCloud (cloud, "cloud");ui->qvtkWidget->SetRenderWindow(viewer->getRenderWindow ());viewer->setupInteractor (ui->qvtkWidget->GetInteractor (), ui->qvtkWidget->GetRenderWindow ());ui->qvtkWidget->update ();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/point_types.h>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;//点云数据存储pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;//初始化vtk部件void initialVtkWidget();
private slots:void pushButtonTest();
};#endif // MAINWINDOW_H

4.BugFix

1.static_cast: 无法从vtkObjectBase *const转换为“T”

解决方法:
加入
#include <vtkRenderWindow.h>

2.无法链接的外部符号

it MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
Ui::MainWindow *ui;
//点云数据存储
pcl::PointCloudpcl::PointXYZ::Ptr cloud;
boost::shared_ptrpcl::visualization::PCLVisualizer viewer;
//初始化vtk部件
void initialVtkWidget();
private slots:
void pushButtonTest();
};

#endif // MAINWINDOW_H

### 4.BugFix#### 1.static_cast: 无法从vtkObjectBase *const转换为“T”解决方法:
加入
\#include <vtkRenderWindow.h>#### 2.无法链接的外部符号查看Cmakelist里面find_package的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JAVA的厦门旅游电子商务预订系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

TYPE C 接口知识详解

1、Type C 概述 Type-C口有4对TX/RX分线&#xff0c;2对USBD/D-&#xff0c;一对SBU&#xff0c;2个CC&#xff0c;另外还有4个VBUS和4个地线。 当Type-C接口仅用作传输DP信号时&#xff0c;则可利用4对TX/RX&#xff0c;从而实现4Lane传输&#xff0c;这种模式称为DPonly模式…

Leetcode 435 无重叠区间

题意理解&#xff1a; 给定一个区间的集合 intervals 要求需要移除区间&#xff0c;使剩余区间互不重叠 目标&#xff1a;最少需要移除几个区间。 解题思路&#xff1a; 采用贪心思路解题&#xff0c;什么是全局最优解&#xff0c;什么是局部最优解。 全局最优解&#xff0c;删…

使用Java语言判断一个年度是不是闰年

一、 代码说明 引入Scanner函数&#xff0c;将类命名为Judge类&#xff0c;使用try语句和catch语句将整体代码包围起来&#xff0c;使用if语句来判断是否为闰年&#xff0c;输入年份&#xff0c;然后得到相应的结论。 二、代码 import java.util.Scanner; public class Judg…

叮咚,微信年度聊天报告(圣诞节版)请查收~丨GitHub star 16.8k+

微信年度聊天报告——圣诞节特别版&#xff0c;快发给心仪的ta吧~ 开源地址 GitHub开源地址&#xff1a;https://github.com/LC044/WeChatMsg 我深信有意义的不是微信&#xff0c;而是隐藏在对话框背后的一个个深刻故事。未来&#xff0c;每个人都能拥有AI的陪伴&#xff0c;…

Microsoft Store 里有哪些好用的软件?

Windows 应用商店还是有不少干货软件的。 下面给大家推荐 12 款 Windows 应用商店里优秀实用的 UWP 应用软件&#xff0c;无广告、不流氓、体验好&#xff0c;强烈建议收藏&#xff01; 而且经过商店审核和限制&#xff0c;也更加安全、干净&#xff0c;不用担心有乱七八糟的…

内存管理学习

内存管理 在计算系统中&#xff0c;通常存储空间分为两种&#xff1a;内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快&#xff0c;能够按照变量地址随机访问&#xff0c;也就是我们通常所说的RAM&#xff08;随机存储器&#xff09;&#xff0c;可以把它理解为…

Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时,动态变化时无法及时刷新更新适配界面的问题

Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时&#xff0c;动态变化时无法及时刷新更新适配界面的问题 目录 Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时&#xff0c;动态变化时无法及时刷新更新适配界面的问题 一、简单介绍…

Yolov5水果分类识别+pyqt交互式界面

Yolov5 Fruits Detector Yolov5 是一种先进的目标检测算法&#xff0c;可以应用于水果分类识别任务。结合 PyQT 框架&#xff0c;可以创建一个交互式界面&#xff0c;使用户能够方便地上传图片并获取水果分类结果。以下将详细阐述 Yolov5 水果分类识别和 PyQT 交互式界面的实现…

基于ssm智能社区管理系统的设计与实现+vue论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本智能社区管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

unity脚本API中OnCollisionEnter()、OnTriggerEnter()二者的区别

Unity中的OnCollisionEnter和OnTriggerEnter两个函数在日常的开发中很常见但也容易混淆&#xff0c;下面说一说两者的区别。 碰撞器&#xff08;Collider&#xff09;与触发器&#xff08;Trigger&#xff09;的概念 碰撞器&#xff08;Collider&#xff09;和触发器&#xff…

nodejs+vue+ElementUi医院预约挂号系统3e3g0

本医院预约挂号系统有管理员&#xff0c;医生和用户。该系统将采用B/S结构模式&#xff0c;使用Vue和ElementUI框架搭建前端页面&#xff0c;后端使用Nodejs来搭建服务器&#xff0c;并使用MySQL&#xff0c;通过axios完成前后端的交互 管理员功能有个人中心&#xff0c;用户管…

JAVA程序流程控制

程序的流程控制一般分为3种&#xff1a;顺序结构、分支结构、循环结构 顺序结构&#xff1a;就是不加任何控制&#xff0c;代码从main方法开始自上而下执行 分支结构&#xff1a;就是根据条件判断是true还是false&#xff0c;有选择性的执行哪些代码。在Java语言中提供了两个格…

人工智能_机器学习071_SVM支持向量机_人脸识别算法_LFW人脸数据加载_与理解---人工智能工作笔记0111

然后我们继续来看 这里有个lfw_home可以看到这个数据是,包含了人脸数据 然后我们继续看,在我们的顶你用户目录下,如果安装了,sklearn就会有这样一个目录, scikit_learn_data目录,这个里面可以看到 可以看到这个文件夹中有个 lfw_home文件夹是对.zip文件夹的解压,这个下载以后…

0.618算法和基于Armijo准则的线搜索回退法

0.618代码如下&#xff1a; import math # 定义函数h(t) t^3 - 2t 1 def h(t): return t**3 - 2*t 1 # 0.618算法 def golden_section_search(a, b, epsilon): ratio 0.618 while (b - a) > epsilon: x1 b - ratio * (b - a) x2 a ratio * (b - a) h_…

L1-058:6翻了

“666”是一种网络用语&#xff0c;大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”&#xff0c;意思是“6翻了”&#xff0c;实在太厉害的意思。如果你以为这就是厉害的最高境界&#xff0c;那就错啦 —— 目前的最高境界是数字“27”&#xff0c;因为这…

openGauss学习笔记-168 openGauss 数据库运维-备份与恢复-导入数据-使用gs_restore命令导入数据

文章目录 openGauss学习笔记-168 openGauss 数据库运维-备份与恢复-导入数据-使用gs_restore命令导入数据168.1 操作场景168.2 操作步骤168.3 示例 openGauss学习笔记-168 openGauss 数据库运维-备份与恢复-导入数据-使用gs_restore命令导入数据 168.1 操作场景 gs_restore是…

【Linux】进程周边007之进程控制

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.进程创建 2.进程终止 2.…

【JAVA面试题】什么是代码单元?什么是码点?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 目录 前言 思路 代码单元&#xff08;Code Unit&#xff09;&#xff1a; 码点&#xff08;Code Point&#xff09;&#xff1a; 作…

java设计模式学习之【责任链模式】

文章目录 引言责任链模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用日志示例代码地址 引言 在现实生活中&#xff0c;常常会遇到这样的场景&#xff1a;一个请求或命令需要经过多个层级的处理。例如&#xff0c;一个行政审批流程可能需要通过多个部门的审…