查看Ubuntu下opencv安装库:
可以看到我的opencv库安装在/usr/local/lib
路径下。
查看Ubuntu下opencv安装版本:
可以看到我的电脑上装的是3.4.11版本的opencv。
查看Ubuntu下opencv安装路径:
可以看到我的电脑上有两个版本的opencv,一个是我用opencv源码安装的3.4.11版本的(在/usr/local/lib
目录下),一个是ros kinetic自动安装的3.3.1版本的(在/opt/ros/kinetic
目录下)。如果不指定版本,cmake会自动链接3.3.1版本的opencv库,由于此版本较低,好多模块不全,比如dnn模块就不包含,会造成程序运行错误,因此需要链接指定新版本的opencv库。
使用find_package链接指定版本opencv库
- 源码分布情况
├── CMakeLists.txt
├── src
│ └── rs_depth_test.cc
└── build - find_package使用简介
cmake本身不提供任何关于搜索库的便捷方法,也不会对库本身的环境变量进行设置。它仅仅是按照优先级顺序在指定的搜索路径进行查找FindOpencv.cmake
文件和OpenCVConfig.cmake
文件(特别注意的是有大小写之分),cmake能够找到这两个文件中的任何一个,都能成功使用该库。当我们在cmake..
命令之后,cmake 会读取执行CMakeLists.txt
中的代码,当执行find_package()
这条命令后,cmake 就会从某些路径中找FindOpencv.cmake
文件或者OpenCVConfig.cmake
文件,cmake找到任意一个之后就会执行这个文件,然后这个文件执行后就会设置好一些cmake变量。
一般常用的就是OpenCV_FOUND 、OpenCV_INCLUDE_DIRS、OpenCV_LIBS
,分别代表是否找到库的标志、库的头文件路径、库文件路径。find_package()
有两种模式:Module模式和Config模式,分别对应上面的FindOpencv.cmake
文件和OpenCVConfig.cmake
文件。cmake默认优先Module模式,而Config模式是备选项。 - Module模式(仅仅查找Findxxx.cmake文件):
cmake会优先搜索CMAKE_MODULE_PATH
指定的路径,如果在CMakeLists.txt中没有设置CMAKE_MODULE_PATH
为存储Findxxx.cmake
的路径,也就是说没有下面的指令:set(CMAKE_MODULE_PATH "Findxxx.cmake文件所在的路径")
,那么cmake不会搜索CMAKE_MODULE_PATH
指定的路径,此时cmake会搜索第二优先级的路径,也就是<CMAKE_ROOT>/share/cmake-x.y/Mdodules
。其中CMAKE_ROOT
是你在安装cmake的时候的系统路径,因为我并没有指定安装路径,所以是系统默认的路径,在我的系统中(ubuntu16.04)系统的默认路径是/usr/loacl
,如果你在安装的过程中使用了cmake -DCMAKE_INSTALL_PREFIX=自己dir路径
,那么此时CMAKE_ROOT
就代表那个你写入的路径 。刚刚说道第一优先级的路径搜索没有找到Findxxx.cmake
文件,就会到第二优先级的路径下搜索。如果cmake在两个路径下都没有找到Findxxx.cmake文件。那么cmake就会进入Config模式。 - Config模式(仅仅查找xxxConfig.cmake文件):
cmake会优先搜索xxx_DIR
指定的路径。如果在CMakeLists.txt
中没有设置这个cmake变量。也就是说没有下面的指令:set(xxx_DIR "xxxConfig.cmkae文件所在的路径")
,那么cmake就不会搜索xxx_DIR
指定的路径,此时cmake 就会自动到第二优先级的路径下搜索,也就是/usr/local/lib/cmake/xxx/
中的xxxConfig.cmake
文件。 - CMakeLists.txt 文件
find_package(OpenCV 3.4.11 REQUIRED)
中的OpenCV
一定要遵循该大小写,这句话会在Ubuntu系统中OpenCV
安装目录按照指定顺序找到FindOpencv.cmake
和OpenCVConfig.cmake
文件,找到这两个文件中的任何一个,我们都能成功使用该库,进而确定你要引入的opencv头文件和库函数在哪里。该文件定义了OpenCV_FOUND
、OpenCV_INCLUDE_DIRS
和OpenCV_LIBS
等变量,分别代表是否找到库的标志、库的头文件路径、库文件路径。可以使用 include_directories
和target_link_libraries
来访问这两个变量。
可以通过打开终端输入locate OpenCVConfig.cmake
来找到这个.cmake
文件,用以确认系统确实安装了OpenCV
。
使用link_libraries(opencv库名的方法)
本人没有使用这种方法。
编译与运行
- 编译
cd build
cmake …
make - 运行可执行文件
./rs_depth_test