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_OBJECT

public:
    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的问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云手机解决Tik Tok运营难题

对于海外营销的企业来说&#xff0c;Tik Tok是不可错过的宣传平台。本文将介绍Tik Tok运营过程中会遇到的几个问题&#xff0c;以及如何通过海外云手机解决。 Tik Tok运营的主要问题 1、高昂的硬件成本和封号风险 很多企业会选择矩阵式营销&#xff0c;但为了不封号每个账号都…

ansible的脚本:playbook剧本

&#xff08;一&#xff09;playbook的组成部分 tasks 任务&#xff0c;包含要在主机上执行的操作&#xff0c;使用模块定义这些操作&#xff0c;每一个任务都是一个模块的调用 variables 变量&#xff0c;存储和传递数据&#xff08;和shell脚本中的变量是一个意思&#xf…

理解Java中锁的应用

一、死锁 1.1 定义&#xff1a; 当线程 A 持有独占锁a&#xff0c;并尝试去获取独占锁 b 的同时&#xff0c;线程 B 持有独占锁 b&#xff0c;并尝试获取独占锁 a 的情况下&#xff0c;就会发生 AB 两个线程由于互相持有对方需要的锁&#xff0c;而发生的阻塞现象&#xff0c…

雄雄的小课堂微信机器人流程图

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 最近改造了下微信机器人&#xff0c;新版本还未上线&#xff0c;预计下周一&#xff08;12.25&#xff09;左右能上线第一版。 下面是改造之后的流程图 大家可以看看&#xff0c;有疑问可…

【计算机视觉中的多视图几何系列】深入浅出理解针孔相机模型

温故而知新&#xff0c;可以为师矣&#xff01; 一、参考资料 《计算机视觉中的多视图几何-第五章》-Richard Hartley, Andrew Zisserman. 二、针孔模型相关介绍 1. 重要概念 1.1 投影中心/摄像机中心/光心 投影中心称为摄像机中心&#xff0c;也称为光心。投影中心位于一…

Ubuntu及Docker 安装rabbitmq

安装ubuntu 前 先暴露端口&#xff1a; 5672 用于与mq服务器通信用 15672 管理界面使用的端口 docker命令&#xff1a;docker run -itd --name ubuntu -p 5672:5672 -p 15672:15672 ubuntu 进入docker : docker exec -it ubuntu /bin/bash 步骤&#xff1a; 1. 更新安装源…

算法学习系列(九):离散化

目录 引言一、离散化概念二、离散化模板三、例题四、测试 引言 这个离散化我的理解就是你如果要用到数组的下标进行存数&#xff0c;会有多个询问针对下标进行操作&#xff0c;然后这个下标特别的大&#xff0c;而且存的数也是特别的分散&#xff0c;举个例子就是有三个数&…

VScode 工作区配置 和 用户配置

一、工作区配置 通常不同的项目都有不同的配置&#xff0c;我一般都是使用eslint和prettier一起用&#xff0c;所以经常会有这几个文件&#xff1a; 这里简单介绍一下这几个文件的作用吧。 1.vscode文件夹下 一般有两个文件&#xff0c;extensions.json和settings.json。 e…

07 Vue3中的三元表达式

概述 三元表达式时JavaScript中比较常用的一种原生语法&#xff0c;能够在一行代码中实现if-else的分支逻辑。 在Vue的双大括号中&#xff0c;我们也可以使用三元表达式去实现一些简单的条件渲染。 基本用法 我们创建src/components/Demo07.vue&#xff0c;先尝试一下三元表…

【泛型中K T V E? Object等分别代表什么含 义】

✅ 泛型中K T V E? Object等分别代表什么含义 ✅ 典型解析✅代码示例 ✅ 典型解析 E - Element (在集合中使用&#xff0c;因为集合中存放的是元素) T-Type (Java 类) K- Key (键) V - Value (值) N - Number (数值类型) ? - 表示不确定的iava类型 (无限制通配符类型) …

linux 中 C++的环境搭建以及测试工具的简单介绍

文章目录 makefleCMakegdb调试 与 coredumpValgrind 内存检测gtest 单元测试 makefile 介绍 安装 : sudo apt install make makefile 的规则: 举例说明 包括&#xff1a;目标文件 、 依赖文件 、 生成规则 使用 &#xff1a; make make clean CMake : CMake是一个…

OpenHarmony 4.0 Release发布,同步升级API 10

不久之前&#xff0c;OpenHarmony 正式发布了4.0 版本&#xff0c;开发套件也同步升级到 API 10。相比 3.2 Release 版本&#xff0c;4.0 版本新增 4000 多个 ArkTS API&#xff0c;应用开发能力更加丰富&#xff1b;HDF 新增 200 多个 HDI 接口&#xff0c;硬件适配更加便捷&a…

浅谈在线监测系统与配电能效平台在供水水厂的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201800 【摘要】针对自来水厂工艺老化资金有限的问题&#xff0c;设计水厂在线监测系统&#xff0c;采用安科瑞&#xff0c;对原水滤后水、出厂水进行采样分析&#xff0c;并通过基于组态的上位机系统实现水质数据的实时监测。该系统…

听GPT 讲Rust源代码--src/tools(23)

File: rust/src/tools/clippy/rustc_tools_util/src/lib.rs 在Rust源代码中&#xff0c;rust/src/tools/clippy/rustc_tools_util/src/lib.rs文件的作用是为Clippy提供了一些实用工具和辅助函数。 该文件中定义了VersionInfo结构体&#xff0c;它有三个字段&#xff0c;分别为m…

opencv入门到精通——图像上的算术运算

目录 目标 图像加法 图像融合 按位运算 目标 学习图像的几种算术运算&#xff0c;例如加法&#xff0c;减法&#xff0c;按位运算等。 您将学习以下功能&#xff1a;cv.add&#xff0c;cv.addWeighted等。 图像加法 您可以通过OpenCV函数cv.add()或仅通过numpy操作res …

账号多、用户咨询量大无法及时回复?「互动管理」助力高效经营!

随着互联网行业不断向纵深发展&#xff0c;内容形态与营销场景也更加多元化。越来越多的品牌跑步入场&#xff0c;深耕社媒营销&#xff0c;建立多平台营销矩阵&#xff0c;借助社媒平台的全域态势助力品牌增长。 据云略《2023品牌新媒体矩阵营销洞察报告》显示&#xff0c;目前…

win11下配置visual studio 2022+PCL1.13.1

第一部分&#xff1a;visual studio2022 安装 vs官网网址如下&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 第一步&#xff1a;我们打开官网链接&#xff0c;按如下操作点击下载免费版本的exe文件 第二步&#xff1a;打开下载目录下的安装文件进行安装&#…

选择移动订货系统源码的四大原因

移动订货系统需要选择源码支持的厂家&#xff0c;有以下四个原因&#xff0c;其中第四个是比较重要的&#xff0c;大家点个关注点个赞&#xff0c;我们接着往下看。 1.可自行定制&#xff1a;支持源码的移动订货系统可以根据企业的具体需求进行定制开发&#xff0c;满足企业特定…

vue3 登录页和路由表开发

目录 应用场景/背景描述&#xff1a; 开发流程&#xff1a; 详细开发流程&#xff1a; 总结/分析&#xff1a; 背景描述 在上一篇的基础上开始开发&#xff0c;element-plusvue3 上一篇说道详细迁移的过程&#xff0c;如下&#xff1a; 所以我这篇开始了第一步&#xff0c…

Ubuntu20.04.2 Mate 安装后基本初始设置要点笔记

序言&#xff1a; 有几款Linux比较稳定而且LTS长期支持&#xff0c;窗口也比较干净有特色&#xff0c;CentOS、Ubuntu、Debian、Mint 都是挺不错的OS&#xff0c;因为LTS&#xff0c;所以不像Rolling版那样改动频发&#xff0c;为长期应用提供了比较好的保障。下面是 Ubuntu20…