feat:第一次提交

main
邱棚 2025-04-12 00:02:19 +08:00
commit f11b3491b7
3 changed files with 59 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/build/
/cmake-build-debug/

33
CMakeLists.txt Normal file
View File

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

24
pcl_wrapper.cpp Normal file
View File

@ -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;
}
}