天天看点

Mac Mojave系统下vtk和PCL的配置以及在Qt上的使用前言VTK安装与配置Qt使用vtk组件PCL 的安装

目录

  • 前言
  • VTK安装与配置
  • Qt使用vtk组件
  • PCL 的安装

前言

历时五天完成了一个PCL点云显示的小软件,希望能留下自己在Mac上踩过的各种坑以及解决办法,如果有类似的问题,为大家节省时间

VTK安装与配置

【注意事项】

  1. brew install vtk安装的东西会放在/usr/local/Cellar/vtk下,这个目录会被之后pcl寻找依赖库的时候引用。我在懵懂无知的时候装了很多个VTK,最终导致路径混乱。所以一定要注意,只要装一个VTK就行了,选一种方式,brew install或者cmake源码。
  2. 如果vtk --with-qt无法执行,才使用我说的安装VTK的方法。如果要用这个方法,之后在配置的过程很可能会缺包,所以最好先brew install vtk,把lib下的所有文件备份下来,缺什么就补什么

我的问题正是brew install --with-qt会报错,cmake PCL也会报错。

在尝试了各种方法后,最终为了解决问题,我从GitHub上下载了VTK的源码,然后用CMake GUI进行编译,把CMake之后的文件装到brew install应该装到的地方,最后用brew link vtk把所有文件链接上(很关键)。具体编译过程不多说,重要的是GUI里的框都要勾选些什么,这是我勾选的东西:

Mac Mojave系统下vtk和PCL的配置以及在Qt上的使用前言VTK安装与配置Qt使用vtk组件PCL 的安装
Mac Mojave系统下vtk和PCL的配置以及在Qt上的使用前言VTK安装与配置Qt使用vtk组件PCL 的安装

有几点特别要说明的是:

4. VTK_WRAP_PYTHON一定要勾选,不然在之后pcl.io的静态库会找不到Python Wrap

5. Qt要填写自己Qt CMake文件夹所在的地址

6. Backend 选择OpenGL2,不一定非要选择OpenGL(有大神好像可以成功,但是我没有成功,在之后各种找不到OpenGL2的包,这是因为

PCL 1.9.1 引用的vtk的backend是基于OpenGL2

)之后如果报错找不到包或者头文件之类的,只要在引用头文件的时候加上初始化定义即可(对于新版VTK来说这是必须的,详见官网),即:

#include <vtkAutoInit.h>#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
           

如果再次brew install vtk,系统提示已经安装完成,则这一步算成功。

之后我又遇到了两个情况:

7. Qt找不到库,而明明装好的vtk lib下是有这个库的,这里需要用之前说的brew link vtk;

8. 提示pcl-io找不到库,这是因为brew install的PCL静态库默认寻找-8.1.1.dylib的vtk文件。如果库的命名结尾不是-8.1.1.dylib,这个时候可以利用Mac的批量重命名功能,将所有的软连接文件名字后缀改为-8.1.1.dylib。如果缺少软连接,则可以在终端用命令ln -s (源文件) (软连接文件)生成软连接;

Qt使用vtk组件

这个部分卡的时间最久,我遇到了非常奇怪的问题:Mac下的QVTKWidget异常放大:

[qtcreator的Designer效果图]

Mac Mojave系统下vtk和PCL的配置以及在Qt上的使用前言VTK安装与配置Qt使用vtk组件PCL 的安装

[运行出来的样子]

Mac Mojave系统下vtk和PCL的配置以及在Qt上的使用前言VTK安装与配置Qt使用vtk组件PCL 的安装

所有的组件都异常放大很多倍,这是因为用了QVTKWidget而不是QVTKOpenGLWidget,解决办法和详细的问题描述参见:

https://stackoverflow.com/questions/54231657/abnormal-size-of-qt-gui-widget-on-macos/54231720?noredirect=1#comment95300033_54231720

PCL 的安装

brew install pcl 即可

继续阅读