PCL 点云库的安装和使用(win系统)

PCL 点云库的安装和使用

官方教程

https://pcl.readthedocs.io/projects/tutorials/en/master/#

API

https://pointclouds.org/documentation/

github

https://github.com/PointCloudLibrary/pcl

exe 安装

下载最新版 https://github.com/PointCloudLibrary/pcl/releases/
运行安装 PCL-1.13.1-AllInOne-msvc2022-win64.exe
我安装路径是 D:\software\PCL
配置系统环境变量
PCL 点云库的安装和使用(win系统)_第1张图片

在CMake 工程中使用

vscode 新建 CMake项目 kd_search ,路径 D:\workspace\CPP\kd_search\

CMakelists.txt :

cmake_minimum_required(VERSION 3.0.0)
project(kd_search VERSION 0.1.0 LANGUAGES C CXX)

find_package(PCL CONFIG REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

add_executable (kdtree_search main.cpp)
target_link_libraries (kdtree_search PUBLIC ${PCL_LIBRARIES})

main.cpp:

#include 
#include 

#include 
#include 
#include 

int main()
{
    srand(time(NULL));

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

    // Generate pointcloud data
    cloud->width = 1000;
    cloud->height = 1;
    cloud->points.resize(cloud->width * cloud->height);

    for (std::size_t i = 0; i < cloud->size(); ++i)
    {
        (*cloud)[i].x = 1024.0f * rand() / (RAND_MAX + 1.0f);
        (*cloud)[i].y = 1024.0f * rand() / (RAND_MAX + 1.0f);
        (*cloud)[i].z = 1024.0f * rand() / (RAND_MAX + 1.0f);
    }

    pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;

    kdtree.setInputCloud(cloud);

    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);

    // K nearest neighbor search

    int K = 10;

    std::vector<int> pointIdxKNNSearch(K);
    std::vector<float> pointKNNSquaredDistance(K);

    std::cout << "K nearest neighbor search at (" << searchPoint.x
              << " " << searchPoint.y
              << " " << searchPoint.z
              << ") with K=" << K << std::endl;

    if (kdtree.nearestKSearch(searchPoint, K, pointIdxKNNSearch, pointKNNSquaredDistance) >0)
    {
        for (std::size_t i = 0; i < pointIdxKNNSearch.size(); ++i)
            std::cout << "    " << (*cloud)[pointIdxKNNSearch[i]].x
                      << " " << (*cloud)[pointIdxKNNSearch[i]].y
                      << " " << (*cloud)[pointIdxKNNSearch[i]].z
                      << " (squared distance: " << pointKNNSquaredDistance[i] << ")" << std::endl;
    }

    // Neighbors within radius search

    std::vector<int> pointIdxRadiusSearch;
    std::vector<float> pointRadiusSquaredDistance;

    float radius = 256.0f * rand() / (RAND_MAX + 1.0f);

    std::cout << "Neighbors within radius search at (" << searchPoint.x
              << " " << searchPoint.y
              << " " << searchPoint.z
              << ") with radius=" << radius << std::endl;

    if (kdtree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) >0)
    {
        for (std::size_t i = 0; i < pointIdxRadiusSearch.size(); ++i)
            std::cout << "    " << (*cloud)[pointIdxRadiusSearch[i]].x
                      << " " << (*cloud)[pointIdxRadiusSearch[i]].y
                      << " " << (*cloud)[pointIdxRadiusSearch[i]].z
                      << " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << std::endl;
    }

    return 0;
}

编译Debug 版本成功之后运行,发现没输出:
复制 pcl_commond.dll pcl_kdtreed.dll 到目录:D:\workspace\CPP\kd_search\build\Debug

编译Release版本成功之后运行,发现没输出:
复制 pcl_common.dll pcl_kdtree.dll 到目录:D:\workspace\CPP\kd_search\build\Release

以上 dll 在安装路径下 D:\software\PCL\bin

运行成功:
PCL 点云库的安装和使用(win系统)_第2张图片

你可能感兴趣的:(PCL,算法,c++)