Configuración de la biblioteca de nube de puntos PCL1.11.1 en el entorno Win10+VS2019 (súper detallado)

Configuración de la biblioteca de nube de puntos PCL1.11.1 en el entorno Win10+VS2019 (súper detallado)

1. Descargue PCL1.11.1 del sitio web oficial

Encuentre las versiones en el github de la biblioteca de nube de puntos PCL. Dirección de descarga: https://github.com/PointCloudLibrary/pcl/releases
Insertar descripción de la imagen aquí
. Descargue estos tres archivos. El proceso de descarga puede ser lento. Se ha descargado aquí y puede descargarse Descargado en Baidu, el disco de red se puede extraer por sí solo.

Enlace: https://pan.baidu.com/s/1y1MkpTzp5F_2mtabRrYH9A
Código de extracción: 1rh4

2. Instale PCL1.11.1

1. Abra el archivo "PCL-1.11.1-AllInOne-msvc2019-win64.exe" descargado
Insertar descripción de la imagen aquí
(1) Seleccione el segundo, agregue automáticamente variables de entorno y cree un acceso directo en el escritorio en la parte inferior.
Si el proceso de instalación indica que no se pueden agregar variables de entorno, debe agregarlas manualmente. El método de adición manual se presentará más adelante.
Insertar descripción de la imagen aquí
(2) Seleccione el directorio de instalación e intente no instalar en la unidad C. La ruta que establecí aquí es: H:\PCL\PCL 1.11.1
¡Asegúrese de recordar la ubicación de instalación!
Insertar descripción de la imagen aquí
(3) Luego haga clic en "Siguiente" y luego en "Instalar".
Insertar descripción de la imagen aquí

[Nota]: La ventana de instalación de OpenNI2 aparecerá durante el proceso de instalación. Instale OpenNI2 en el archivo de terceros de PCL. La ruta seleccionada es: H:\PCL\PCL 1.11.1\3rdParty\OpenNI2.

(4) Una vez completada la instalación, el contenido de la carpeta PCL es el siguiente:
Insertar descripción de la imagen aquí
El contenido de la carpeta OpenNI2 es el siguiente:
Insertar descripción de la imagen aquí

(5) Finalmente, descomprima el contenido del archivo "pcl-1.11.1-pdb-msvc2019-win64.zip" y cópielo en el archivo "H:\PCL\PCL 1.11.1\bin".
Insertar descripción de la imagen aquí
En este punto finaliza el proceso de instalación.

2. Configure las variables de entorno.Si
el proceso de instalación indica "No se pueden agregar variables de entorno porque la ruta es demasiado larga", debe agregar las variables de entorno manualmente.
Haga clic derecho en esta computadora y seleccione "Propiedades", abra "Configuración avanzada del sistema" y seleccione "Variables de entorno".
Insertar descripción de la imagen aquí
(1) Como se puede observar en las variables del sistema, se han agregado el directorio raíz de PCL y el directorio de OpenNI2.
Insertar descripción de la imagen aquí
De lo contrario, agréguelo manualmente y tenga en cuenta que la ruta es coherente con la ruta de instalación que configuró.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

(2) Luego haga doble clic en "Ruta" en las variables del sistema y agregue la siguiente ruta a la variable de entorno. (Según su propia configuración de ruta de instalación)
Insertar descripción de la imagen aquí
El contenido adicional específico es el siguiente:

H:\PCL\PCL 1.11.1\bin
H:\PCL\PCL 1.11.1\3rdParty\FLANN\bin
H:\PCL\PCL 1.11.1\3rdParty\VTK\bin
H:\PCL\PCL 1.11.1\3rdParty\Qhull\bin
H:\PCL\PCL 1.11.1\3rdParty\OpenNI2\Tools
%OPENNI2_REDIST64%
%OPENNI2_LIB64%
%OPENNI2_INCLUDE64%

Después de agregar las variables de entorno, reinicie la computadora.

3. Configurar el entorno de desarrollo en VS2019

1. Cree un nuevo proyecto vacío,
Insertar descripción de la imagen aquí
establezca el nombre del proyecto y la ruta de almacenamiento y haga clic en "Aceptar".

(1) Después de la creación, seleccione Depurar para la configuración de la solución y x64 para la plataforma de la solución.
Insertar descripción de la imagen aquí
(2) Luego cree un nuevo archivo fuente .cpp en el archivo fuente.
Insertar descripción de la imagen aquí
2. Configure las propiedades.
Haga clic derecho en el proyecto y seleccione "Propiedades"
Insertar descripción de la imagen aquí
(1) Primero, seleccione "Depurar" para configuración y "x64" para plataforma, luego seleccione Propiedades de configuración – Depurar – Entorno. Seleccione Editar
Insertar descripción de la imagen aquí
en el entorno y agregue el siguiente contenido.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Los contenidos específicos son los siguientes:

H:\PCL\PCL 1.11.1\bin;
H:\PCL\PCL 1.11.1\3rdParty\FLANN\bin;
H:\PCL\PCL 1.11.1\3rdParty\VTK\bin;
H:\PCL\PCL 1.11.1\3rdParty\OpenNI2\Tools

(2) Luego seleccione "Idioma" en C++, cambie "Conforme al patrón" a "No",
Insertar descripción de la imagen aquí
continúe seleccionando "Todas las opciones" en C++, cambie "SDL Check" a "No"
Insertar descripción de la imagen aquí
(3) Seleccione "Administrador de propiedades" " , haga clic derecho en "Debug|x64" y seleccione "Agregar nueva hoja de propiedades del proyecto".
Insertar descripción de la imagen aquí
Nómbrelo "PCL1.11.1" y seleccione la ubicación de almacenamiento, para que pueda elegir directamente cambiar las propiedades para la configuración del entorno en el futuro.
Insertar descripción de la imagen aquí
Después de agregar, haga doble clic para abrir la página de propiedades e iniciar la configuración.
Insertar descripción de la imagen aquí
(4) Seleccione "Incluir directorio" en el directorio VC++, haga clic en Editar y agregue 7 contenidos.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Los contenidos específicos son los siguientes:

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

(5) Seleccione "Directorio de biblioteca" en el directorio VC++, haga clic en Editar y agregue 6 contenidos.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Los contenidos específicos son los siguientes:

H:\PCL\PCL 1.11.1\lib
H:\PCL\PCL 1.11.1\3rdParty\Boost\lib
H:\PCL\PCL 1.11.1\3rdParty\FLANN\lib
H:\PCL\PCL 1.11.1\3rdParty\OpenNI2\Lib
H:\PCL\PCL 1.11.1\3rdParty\Qhull\lib
H:\PCL\PCL 1.11.1\3rdParty\VTK\lib

(6) Seleccione "Preprocesador" en C/C++, seleccione "Definición de preprocesador", haga clic en Editar y agregue contenido.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Los contenidos específicos son los siguientes:

_SCL_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS

(7) Cambie "SDL Check" para todas las opciones en C/C++ a "No".
Insertar descripción de la imagen aquí
(8) Seleccione "Entrada" en el conector, seleccione "Dependencias adicionales", haga clic en Editar y agregue contenido.
Insertar descripción de la imagen aquí
El contenido agregado es el archivo lib en el directorio raíz PCL (H:\PCL\PCL 1.11.1\lib) y el archivo lib en PCL\3rdParty\VTK (H:\PCL\PCL 1.11.1\3rdParty\VTK\ lib), el nombre de archivo de la versión de depuración tiene el sufijo "-gd".
Insertar descripción de la imagen aquí
Los contenidos específicos son los siguientes:

pcl_commond.lib
pcl_featuresd.lib
pcl_filtersd.lib
pcl_iod.lib
pcl_io_plyd.lib
pcl_kdtreed.lib
pcl_keypointsd.lib
pcl_mld.lib
pcl_octreed.lib
pcl_outofcored.lib
pcl_peopled.lib
pcl_recognitiond.lib
pcl_registrationd.lib
pcl_sample_consensusd.lib
pcl_searchd.lib
pcl_segmentationd.lib
pcl_stereod.lib
pcl_surfaced.lib
pcl_trackingd.lib
pcl_visualizationd.lib
vtkChartsCore-8.2-gd.lib
vtkCommonColor-8.2-gd.lib
vtkCommonComputationalGeometry-8.2-gd.lib
vtkCommonCore-8.2-gd.lib
vtkCommonDataModel-8.2-gd.lib
vtkCommonExecutionModel-8.2-gd.lib
vtkCommonMath-8.2-gd.lib
vtkCommonMisc-8.2-gd.lib
vtkCommonSystem-8.2-gd.lib
vtkCommonTransforms-8.2-gd.lib
vtkDICOMParser-8.2-gd.lib
vtkDomainsChemistry-8.2-gd.lib
vtkDomainsChemistryOpenGL2-8.2-gd.lib
vtkdoubleconversion-8.2-gd.lib
vtkexodusII-8.2-gd.lib
vtkexpat-8.2-gd.lib
vtkFiltersAMR-8.2-gd.lib
vtkFiltersCore-8.2-gd.lib
vtkFiltersExtraction-8.2-gd.lib
vtkFiltersFlowPaths-8.2-gd.lib
vtkFiltersGeneral-8.2-gd.lib
vtkFiltersGeneric-8.2-gd.lib
vtkFiltersGeometry-8.2-gd.lib
vtkFiltersHybrid-8.2-gd.lib
vtkFiltersHyperTree-8.2-gd.lib
vtkFiltersImaging-8.2-gd.lib
vtkFiltersModeling-8.2-gd.lib
vtkFiltersParallel-8.2-gd.lib
vtkFiltersParallelImaging-8.2-gd.lib
vtkFiltersPoints-8.2-gd.lib
vtkFiltersProgrammable-8.2-gd.lib
vtkFiltersSelection-8.2-gd.lib
vtkFiltersSMP-8.2-gd.lib
vtkFiltersSources-8.2-gd.lib
vtkFiltersStatistics-8.2-gd.lib
vtkFiltersTexture-8.2-gd.lib
vtkFiltersTopology-8.2-gd.lib
vtkFiltersVerdict-8.2-gd.lib
vtkfreetype-8.2-gd.lib
vtkGeovisCore-8.2-gd.lib
vtkgl2ps-8.2-gd.lib
vtkglew-8.2-gd.lib
vtkGUISupportMFC-8.2-gd.lib
vtkhdf5-8.2-gd.lib
vtkhdf5_hl-8.2-gd.lib
vtkImagingColor-8.2-gd.lib
vtkImagingCore-8.2-gd.lib
vtkImagingFourier-8.2-gd.lib
vtkImagingGeneral-8.2-gd.lib
vtkImagingHybrid-8.2-gd.lib
vtkImagingMath-8.2-gd.lib
vtkImagingMorphological-8.2-gd.lib
vtkImagingSources-8.2-gd.lib
vtkImagingStatistics-8.2-gd.lib
vtkImagingStencil-8.2-gd.lib
vtkInfovisCore-8.2-gd.lib
vtkInfovisLayout-8.2-gd.lib
vtkInteractionImage-8.2-gd.lib
vtkInteractionStyle-8.2-gd.lib
vtkInteractionWidgets-8.2-gd.lib
vtkIOAMR-8.2-gd.lib
vtkIOAsynchronous-8.2-gd.lib
vtkIOCityGML-8.2-gd.lib
vtkIOCore-8.2-gd.lib
vtkIOEnSight-8.2-gd.lib
vtkIOExodus-8.2-gd.lib
vtkIOExport-8.2-gd.lib
vtkIOExportOpenGL2-8.2-gd.lib
vtkIOExportPDF-8.2-gd.lib
vtkIOGeometry-8.2-gd.lib
vtkIOImage-8.2-gd.lib
vtkIOImport-8.2-gd.lib
vtkIOInfovis-8.2-gd.lib
vtkIOLegacy-8.2-gd.lib
vtkIOLSDyna-8.2-gd.lib
vtkIOMINC-8.2-gd.lib
vtkIOMovie-8.2-gd.lib
vtkIONetCDF-8.2-gd.lib
vtkIOParallel-8.2-gd.lib
vtkIOParallelXML-8.2-gd.lib
vtkIOPLY-8.2-gd.lib
vtkIOSegY-8.2-gd.lib
vtkIOSQL-8.2-gd.lib
vtkIOTecplotTable-8.2-gd.lib
vtkIOVeraOut-8.2-gd.lib
vtkIOVideo-8.2-gd.lib
vtkIOXML-8.2-gd.lib
vtkIOXMLParser-8.2-gd.lib
vtkjpeg-8.2-gd.lib
vtkjsoncpp-8.2-gd.lib
vtklibharu-8.2-gd.lib
vtklibxml2-8.2-gd.lib
vtklz4-8.2-gd.lib
vtklzma-8.2-gd.lib
vtkmetaio-8.2-gd.lib
vtkNetCDF-8.2-gd.lib
vtkogg-8.2-gd.lib
vtkParallelCore-8.2-gd.lib
vtkpng-8.2-gd.lib
vtkproj-8.2-gd.lib
vtkpugixml-8.2-gd.lib
vtkRenderingAnnotation-8.2-gd.lib
vtkRenderingContext2D-8.2-gd.lib
vtkRenderingContextOpenGL2-8.2-gd.lib
vtkRenderingCore-8.2-gd.lib
vtkRenderingExternal-8.2-gd.lib
vtkRenderingFreeType-8.2-gd.lib
vtkRenderingGL2PSOpenGL2-8.2-gd.lib
vtkRenderingImage-8.2-gd.lib
vtkRenderingLabel-8.2-gd.lib
vtkRenderingLOD-8.2-gd.lib
vtkRenderingOpenGL2-8.2-gd.lib
vtkRenderingVolume-8.2-gd.lib
vtkRenderingVolumeOpenGL2-8.2-gd.lib
vtksqlite-8.2-gd.lib
vtksys-8.2-gd.lib
vtktheora-8.2-gd.lib
vtktiff-8.2-gd.lib
vtkverdict-8.2-gd.lib
vtkViewsContext2D-8.2-gd.lib
vtkViewsCore-8.2-gd.lib
vtkViewsInfovis-8.2-gd.lib
vtkzlib-8.2-gd.lib

En este punto, se han configurado todas las propiedades. Haga clic derecho en "PCL1.11.1" y haga clic en "Guardar PCL1.11.1". De esta manera, cuando cree un nuevo proyecto en el futuro, puede seleccionar "Agregar tabla de propiedades existente" y agregue PCL1.11.1 directamente sin reconfigurarlo.
Insertar descripción de la imagen aquí

4. Código de prueba

La configuración del entorno se ha completado, probemos el código para ver si tiene éxito. Ingrese el código en "source.cpp".
Insertar descripción de la imagen aquí

El código se muestra a continuación:

#include <iostream>
#include <vector>
#include <ctime>
#include <pcl/point_cloud.h>
#include <pcl/octree/octree.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;
int
main(int argc, char** argv)
{
    
    
	srand((unsigned int)time(NULL));
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	// 创建点云数据
	cloud->width = 1000;
	cloud->height = 1;
	cloud->points.resize(cloud->width * cloud->height);
	for (size_t i = 0; i < cloud->points.size(); ++i)
	{
    
    
		cloud->points[i].x = 1024.0f * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].y = 1024.0f * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].z = 1024.0f * rand() / (RAND_MAX + 1.0f);
	}

	pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(0.1);
	octree.setInputCloud(cloud);
	octree.addPointsFromInputCloud();
	pcl::PointXYZ searchPoint;
	searchPoint.x = 1024.0f * rand() / (RAND_MAX + 1.0f);
	searchPoint.y = 1024.0f * rand() / (RAND_MAX + 1.0f);
	searchPoint.z = 1024.0f * rand() / (RAND_MAX + 1.0f);

	//半径内近邻搜索
	vector<int>pointIdxRadiusSearch;
	vector<float>pointRadiusSquaredDistance;
	float radius = 256.0f * rand() / (RAND_MAX + 1.0f);
	cout << "Neighbors within radius search at (" << searchPoint.x
		<< " " << searchPoint.y
		<< " " << searchPoint.z
		<< ") with radius=" << radius << endl;
	if (octree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0)
	{
    
    
		for (size_t i = 0; i < pointIdxRadiusSearch.size(); ++i)
			cout << "    " << cloud->points[pointIdxRadiusSearch[i]].x
			<< " " << cloud->points[pointIdxRadiusSearch[i]].y
			<< " " << cloud->points[pointIdxRadiusSearch[i]].z
			<< " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << endl;
	}
	// 初始化点云可视化对象
	boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("显示点云"));
	viewer->setBackgroundColor(0, 0, 0);  //设置背景颜色为黑色
	// 对点云着色可视化 (red).
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud, 255, 0, 0);
	viewer->addPointCloud<pcl::PointXYZ>(cloud, target_color, "target cloud");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "target cloud");

	// 等待直到可视化窗口关闭
	while (!viewer->wasStopped())
	{
    
    
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(1000));
	}

	return (0);
}

El resultado es el siguiente:
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/Wxy971122/article/details/117018767
Recomendado
Clasificación