C#调用C++与PCL代码生成的dll

打包dll文件

1.新建动态链接库

在这里插入图片描述

2.配置相关环境

2.1 删除相关生成文件

将生成的文件全都删除,便于后续写自己的函数

在这里插入图片描述

2.2 配置相关运行库文件

1.将自己项目用到的库文件包含到项目中,比如:pcl库文件

在这里插入图片描述

包含目录添加:

<C++>
    D:\program\PCL 1.10.1\include\pcl-1.10
    D:\program\PCL 1.10.1\3rdParty\VTK\include\vtk-8.2
    D:\program\PCL 1.10.1\3rdParty\Qhull\include
    D:\program\PCL 1.10.1\3rdParty\FLANN\include
    D:\program\PCL 1.10.1\3rdParty\Eigen\eigen3
    D:\program\PCL 1.10.1\3rdParty\Boost\include\boost-1_72
    D:\OpenCV3.4.0\opencv\build\include\opencv
    D:\OpenCV3.4.0\opencv\build\include\opencv2
    D:\OpenCV3.4.0\opencv\build\include
</C++>

在这里插入图片描述

2.库目录添加:

在这里插入图片描述

<C++>
    D:\program\PCL 1.10.1\3rdParty\VTK\lib
    D:\program\PCL 1.10.1\3rdParty\Qhull\lib
    D:\program\PCL 1.10.1\3rdParty\FLANN\lib
    D:\program\PCL 1.10.1\3rdParty\Boost\lib
    D:\program\PCL 1.10.1\lib
    D:\OpenCV3.4.0\opencv\build\x64\vc14\lib
    D:\OpenCV3.4.0\opencv\build\x64\vc15\lib
</c++>

在这里插入图片描述

3.附加依赖项

在这里插入图片描述

附加依赖项添加:

<C++>
    pcl_commond.lib
    pcl_featuresd.lib
    pcl_filtersd.lib
    pcl_io_plyd.lib
    pcl_iod.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
    libboost_atomic-vc142-mt-gd-x64-1_72.lib
    libboost_bzip2-vc142-mt-gd-x64-1_72.lib
    libboost_chrono-vc142-mt-gd-x64-1_72.lib
    libboost_container-vc142-mt-gd-x64-1_72.lib
    libboost_context-vc142-mt-gd-x64-1_72.lib
    libboost_coroutine-vc142-mt-gd-x64-1_72.lib
    libboost_date_time-vc142-mt-gd-x64-1_72.lib
    libboost_exception-vc142-mt-gd-x64-1_72.lib
    libboost_fiber-vc142-mt-gd-x64-1_72.lib
    libboost_filesystem-vc142-mt-gd-x64-1_72.lib
    libboost_graph-vc142-mt-gd-x64-1_72.lib
    libboost_graph_parallel-vc142-mt-gd-x64-1_72.lib
    libboost_iostreams-vc142-mt-gd-x64-1_72.lib
    libboost_locale-vc142-mt-gd-x64-1_72.lib
    libboost_log-vc142-mt-gd-x64-1_72.lib
    libboost_log_setup-vc142-mt-gd-x64-1_72.lib
    libboost_math_c99-vc142-mt-gd-x64-1_72.lib
    libboost_math_c99f-vc142-mt-gd-x64-1_72.lib
    libboost_math_c99l-vc142-mt-gd-x64-1_72.lib
    libboost_math_tr1-vc142-mt-gd-x64-1_72.lib
    libboost_math_tr1f-vc142-mt-gd-x64-1_72.lib
    libboost_math_tr1l-vc142-mt-gd-x64-1_72.lib
    libboost_mpi-vc142-mt-gd-x64-1_72.lib
    libboost_numpy38-vc142-mt-gd-x64-1_72.lib
    libboost_prg_exec_monitor-vc142-mt-gd-x64-1_72.lib
    libboost_program_options-vc142-mt-gd-x64-1_72.lib
    libboost_python38-vc142-mt-gd-x64-1_72.lib
    libboost_random-vc142-mt-gd-x64-1_72.lib
    libboost_regex-vc142-mt-gd-x64-1_72.lib
    libboost_serialization-vc142-mt-gd-x64-1_72.lib
    libboost_system-vc142-mt-gd-x64-1_72.lib
    libboost_test_exec_monitor-vc142-mt-gd-x64-1_72.lib
    libboost_thread-vc142-mt-gd-x64-1_72.lib
    libboost_timer-vc142-mt-gd-x64-1_72.lib
    libboost_type_erasure-vc142-mt-gd-x64-1_72.lib
    libboost_unit_test_framework-vc142-mt-gd-x64-1_72.lib
    libboost_wave-vc142-mt-gd-x64-1_72.lib
    libboost_wserialization-vc142-mt-gd-x64-1_72.lib
    libboost_zlib-vc142-mt-gd-x64-1_72.lib
    flann-gd.lib
    flann_cpp-gd.lib
    flann_cpp_s-gd.lib
    flann_s-gd.lib
    qhull_d.lib
    qhullcpp_d.lib
    qhullstatic_d.lib
    qhullstatic_r_d.lib
    qhull_p_d.lib
    qhull_r_d.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
    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
    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
    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
    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
    vtkIOSQL-8.2-gd.lib
    vtkIOTecplotTable-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
    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
    vtkRenderingAnnotation-8.2-gd.lib
    vtkRenderingContext2D-8.2-gd.lib
    vtkRenderingContextOpenGL2-8.2-gd.lib
    vtkRenderingCore-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
    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
    opengl32.lib
    opencv_world340.lib
    opencv_world340d.lib
</C++>

在这里插入图片描述

2.3 其他环境配置

1.不使用预编译头

在这里插入图片描述

2.修改输出目录

在这里插入图片描述

3.预处理器修改

添加DLL_EXPORTS

在这里插入图片描述

3.编写代码

3.1 编写.h文件

在这里插入图片描述

<C++>
    #pragma once
    #include <vector>
    using namespace std;

    #if defined(_MSC_VER)
    #include <direct.h>
    #define GetCurrentDir _getcwd
    #elif defined(__unix__)
    #define GetCurrentDir getcwd
    #else
    #endif

    #ifdef __cplusplus
    extern "C" {
    #endif

    #ifdef DLL_EXPORTS
    #define DLL_API __declspec(dllexport)
    #else
    #define DLL_API __declspec(dllimport)
    #endif

        DLL_API void SeaweedPhenotype(char* inputPath, char* outputPath);
    #ifdef __cplusplus
    }
    #endif
</C++>

3.2 编写.cpp文件

在这里插入图片描述

<C++>
    #include "SeaweedPhenotype.h"
    void SeaweedPhenotype(char* inputPath, char* outputPath) {

    }   
</C++>

3.调用用dll文件

3.1 c#调用dll

1.类中导入dll文件
<C#>
    [DllImport("PointCloudPhenotype.dll", EntryPoint = "SeaweedPhenotype", CallingConvention = CallingConvention.Cdecl)]
    public static extern void SeaweedPhenotype(string inputPath, string outputPath);
</C#>

2.使用SeaweedPhenotype函数

<C#>
    string plyPath = outputPath + "/DenseModel/result.ply";
    string txtResultPath = outputPath+"/result.txt";
    SeaweedPhenotype(plyPath,txtResultPath);
</C#>

注意C#与C++函数传递的对应

<>
    c++    ->      c#
    char*  ->      string
<>

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的多视图点云生成的 C++ 代码示例,使用了 PCL 库: ```cpp #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/visualization/cloud_viewer.h> #include <pcl/registration/icp.h> #include <pcl/filters/voxel_grid.h> int main(int argc, char** argv) { // 加载两个点云 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_src(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_tgt(new pcl::PointCloud<pcl::PointXYZ>); pcl::io::loadPCDFile<pcl::PointXYZ>("src.pcd", *cloud_src); pcl::io::loadPCDFile<pcl::PointXYZ>("tgt.pcd", *cloud_tgt); // 定义 ICP 对象 pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp; icp.setInputCloud(cloud_src); icp.setInputTarget(cloud_tgt); // 进行 ICP 计算 pcl::PointCloud<pcl::PointXYZ> Final; icp.align(Final); // 输出 ICP 变换矩阵 std::cout << "ICP Transformation:" << std::endl << icp.getFinalTransformation() << std::endl; // 降采样 pcl::VoxelGrid<pcl::PointXYZ> sor; sor.setInputCloud(cloud_src); sor.setLeafSize(0.01f, 0.01f, 0.01f); sor.filter(*cloud_src); // 保存点云 pcl::io::savePCDFileASCII("multi_view.pcd", Final); // 可视化 pcl::visualization::CloudViewer viewer("Cloud Viewer"); viewer.showCloud(Final.makeShared()); while (!viewer.wasStopped()) { } return 0; } ``` 这段代码假设已经有两个点云文件 "src.pcd" 和 "tgt.pcd",分别代表两个视角的点云。代码首先加载这两个点云,然后使用迭代最近点(Iterative Closest Point,ICP)算法进行配准,得到两个点云的变换矩阵。接着对一个点云进行降采样,最后将配准后的点云保存到 "multi_view.pcd" 文件中,并可视化显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值