feat:第一次提交
commit
f11b3491b7
|
@ -0,0 +1,2 @@
|
||||||
|
/build/
|
||||||
|
/cmake-build-debug/
|
|
@ -0,0 +1,33 @@
|
||||||
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
project(pcl_wrapper)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
|
# 自动获取 libomp 安装路径
|
||||||
|
execute_process(
|
||||||
|
COMMAND brew --prefix libomp
|
||||||
|
OUTPUT_VARIABLE LIBOMP_PREFIX
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
# 设置头文件和库路径
|
||||||
|
include_directories("${LIBOMP_PREFIX}/include")
|
||||||
|
link_directories("${LIBOMP_PREFIX}/lib")
|
||||||
|
|
||||||
|
# 查找包
|
||||||
|
find_package(PCL REQUIRED)
|
||||||
|
|
||||||
|
# 设置编译选项
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp -I${LIBOMP_PREFIX}/include")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${LIBOMP_PREFIX}/lib -lomp")
|
||||||
|
|
||||||
|
# 设置 PCL
|
||||||
|
include_directories(${PCL_INCLUDE_DIRS})
|
||||||
|
link_directories(${PCL_LIBRARY_DIRS})
|
||||||
|
add_definitions(${PCL_DEFINITIONS})
|
||||||
|
|
||||||
|
# 生成动态库
|
||||||
|
add_library(pclwrapper SHARED pcl_wrapper.cpp)
|
||||||
|
|
||||||
|
# 统一风格链接
|
||||||
|
target_link_libraries(pclwrapper PUBLIC ${PCL_LIBRARIES} -lomp)
|
|
@ -0,0 +1,24 @@
|
||||||
|
// pcl_wrapper.cpp
|
||||||
|
#include <pcl/io/pcd_io.h>
|
||||||
|
#include <pcl/filters/voxel_grid.h>
|
||||||
|
#include <pcl/point_types.h>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
int filter_pcd(const char* input_path, const char* output_path, float leaf_size) {
|
||||||
|
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
|
||||||
|
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>);
|
||||||
|
|
||||||
|
if (pcl::io::loadPCDFile<pcl::PointXYZ>(input_path, *cloud) == -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
pcl::VoxelGrid<pcl::PointXYZ> sor;
|
||||||
|
sor.setInputCloud(cloud);
|
||||||
|
sor.setLeafSize(leaf_size, leaf_size, leaf_size);
|
||||||
|
sor.filter(*cloud_filtered);
|
||||||
|
|
||||||
|
pcl::io::savePCDFile(output_path, *cloud_filtered);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue