PCL

tech2023-11-18  93

在跑代码时经常会出现各种各样的小问题,有的似曾相识,就是记不起来,哈哈哈哈哈哈。

https://blog.csdn.net/o180o/article/details/90264064 pcl环境配置


1、无法打开源文件Eigen\Dense:

Error:代码头文件中:#include <Eigen\Dense>   显示无法打开Eigen\Dense

Solution:显然是缺少Eigen库。可以直接下载一个Eigen库添加上,由于之前安装pcl的时候就包含Eigen第三方库,所以这里我可以直接用。

在项目属性-> 配置属性-> vc++目录-> 包含目录-->编辑-->直接选择Eigen库所在的位置即可,比如我的eigen3在C盘,包含目录就是:C:\Program Files\PCL 1.8.0\3rdParty\Eigen\eigen3


2、mpeg_pcc失真度量软件调试问题:

1、先用CMake编译,显示如下错误:找不到Boost,也就是找不到这个库,但搜索一番,不知道咋改

CMake Error at C:/Program Files/CMake/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message): Could NOT find Boost (missing: Boost_INCLUDE_DIR program_options) Call Stack (most recent call first): C:/Program Files/CMake/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE) C:/Program Files/CMake/share/cmake-3.16/Modules/FindBoost.cmake:2162 (find_package_handle_standard_args) CMakeLists.txt:31 (find_package)

2、决定在VS下直接编译,但代码显示如下错误,还是Boost库的原因,在属性中添加库后还是没解决

(在vs中新建项目,添加所有的.cpp和.hpp文件到项目中,然后配置boot库,)

  

痛定思痛,决定从头到尾重新手动配置一下pcl环境,配置好环境,该加的库都加上,但还是显示上述错误 ,令人头秃。

不经意间,发现了问题所在,点击菜单栏 “生成”,如下图,我配置的是Debug/x64版本,但这里的平台显示的Win32平台,所以改成x64,之后错误消失。


3、 E0312    不存在用户定义的从 “boost::shared_ptr<pcl::KdTreeFLANN<pcl::PointXYZRGB, flann::L2_Simple>>” 到 “const boost::shared_ptr<pcl::search::Searchpcl::PointXYZRGB>” 的适当转换

解决思路:刚开始我认为只是由于不能传递非const实参到const形参,所以加了const进行强制转换,结果还是不行,const关键词的相关知识理解还不到位; 后续直接将错误提示进行google搜索,未找到合适的解决办法;突然想到把错误行代码直接google搜索,说不定就有相同功能的不同实现代码可以替代,或是有作者给出解决方案,最后在2014年的一个pcl_tutorial中找到了后续PCL库版本中的kdtree搜索实现代码,刚开始只是更换错误部分,仅将pcl::KdTreeFLANN替换为pcl::search::KdTree,该错误解决。

4、 错误    C4996    ‘vtkMapper::ImmediateModeRenderingOff’: 被声明为已否决

解决思路:直接百度错误代码,有两种解决办法: 1、将属性——C/C++——常规中的sdl检查改为否;参考链接:错误4996

2、在程序代码最前面添加 #pragma warning(disable: 4996)(在程序代码最前面添加后未通过,有知道原因的请留言指正,谢谢!) 参考链接:错误4996(2)

5、错误    C2440    “初始化”: 无法从“Y *”转换为“pcl::search::KdTree<pcl::PointXYZRGB,pcl::KdTreeFLANN<PointT,flann::L2_Simple>> *”

解决思路:刚开始我以为是定义指针未初始化,更改后未果,查看错误解释发现是问题1中更改的部分,怀疑是虽然编译能通过了,但是还没有改到位,所以根据pcl_tutorial中的kd_tree搜索调用方法进行完全更改,最终完全编译通过。

参考链接:https://blog.csdn.net/NCTU_to_prove_safety/article/details/94011762


6、 error: vector subscript out of range

参考链接:https://blog.csdn.net/qq_40119386/article/details/88857651

2020/11/20更新:想跑个点云融合的实验,但一直出现下面这个错误,原来是我擅自修改了人家的代码 ,师姐的本来是有resize的,但我以为是多余的,注释掉了,但事实上是需要的,这样可以防止越界。参考了上面这个链接。

2020/11/21更新:我以为是我之前注释带代码的原因,但改过来之后发现还是无法读取。试了别的点云,发现竟然可以读取所以应该不是代码的问题,打开点云文件做了对比发现他们的头文件都一样,但就是一个能读一个不能,这玩意就和玄学似的。参考https://blog.csdn.net/zhang010206/article/details/39642827,我在release下是这跑了下,结果都可以读取了。

2020/11/21下午更新: 唉。 不知为何用版本8重建后的点云,文件头中颜色属性的顺序不是RGB 而是GBR就导致合并点云时 他们的RGB都变成了0。我试着吧文件头顺序改成RGB是可以合成的。

11/23更新:ply write在ply文件中,修改下RGB的顺序重新生成解决方案即可。

7、 error: version.cpp找不到

之前生成解决方案是成功的,修改了一些东西,再次生成就会两个error,我直接删掉build中的所有东西,重新cmake,再生成解决方案即可,但不知道具体问题是出在哪里。


 8、 无法启动程序,拒绝访问:

在vs的集成环境下直接点击 绿三角 进行调试总会出现一下提示:

解决方法:发现上述提示信息是与ALL_BUILD相关的,而项目解决方案中启动项目是ALL_BUILD,项目的main 函数在tmc3的TMC3.cpp中,故将tmc3设为启动项目,如下右图,之后进行调试即可。(完全是个人见解)


9、Vs中向命令行添加参数的方法

在VS中向命令行添加参数,即向main()函数传递参数的方法:

右键单击要 添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”(Command Arguments)栏输入要添加的参数,各参数间用空格分离。例如:

"-hide_banner"  "Z:/media/subtitle/internal/divx/496x496.divx"

则传递给main函数的argc为3,其中argv[0]为程序名,argv[1]为"-hide_banner",argv[2]为"Z:/media/subtitle/internal/divx/496x496.divx"

各参数不是必须用""引用起来,但使用""可以防止参数本身有空格被误判。

对于tmc3项目而言,因为我用的相对路径,故将配置文件、点云文件放到项目的工作目录下,即build/tmc3里。

压缩的命令参数为:

-c encoder.cfg --uncompressedDataPath=longdress_vox10_1300.ply --compressedStreamPath=longdress_vox10_1300_r1.bin

 解压缩为:

-c decoder.cfg --compressedStreamPath=longdress_vox10_1300_r1.bin --reconstructedDataPath=longdress_vox10_1300_r1_recon.ply
最新回复(0)