ubuntu下opencv2.4.10 和 opencv 3.10 多版本切换问题

1.由于需要,之前系统中是opencv2.4.10版本,后来安装opencv3.10版本,并支持多版本切换。通过以下命令可以查看opencv版本

[cpp] view plain copy
  1. pkg-config --modversion opencv  


2.如果编译好并安装了opencv3.10版本,想切换到3.10版本,可以通过如下的方式,

通过修改bashrc文件来设置PKG_ CONFIG_PATH 和 LD_LIBRARY_PATH的路径来选择对应的opencv版本

[cpp] view plain copy
  1. sudo gedit ~/.bashrc  

并在文件的默认追加新编译的3.10版本的路径,也就是cmake时:CMAKE_INSTALL_PREFIX=/usr/local/opencv/3.10

[cpp] view plain copy
  1. export PKG_CONFIG_PATH=/usr/local/opencv/3.10/lib/pkgconfig  
  2. export LD_LIBRARY_PATH=/usr/local/opencv/3.10/lib  

然后执行命令,后面用pkg-config --modversion opencv 查看opencv版本的时候就是3.10版本

[cpp] view plain copy
  1. source ~/.bashrc  
3.上面的这些过程并不能保证在写makefile中调用的是3.10版本的库,可能还是调用之前的2.4.10的库,具体还是要在CMakeList.txt中指定要找的opencv的目录,
opencv3.10的编译目录 /usr/local/opencv-3.1.0/build 下找到 OpenCVConfig.cmake 文件,并在CMakeList.txt中添加对应的路径信息。这样cmake的时候调用的就是3.10的库,想切换成原来的2.4.10版本只需将第二步的 bashrc文件和CMakeList.txt文件中修改的内容改成对应的opencv2.4.10的位置就好了。
[cpp] view plain copy
  1. # cmake needs this line  
  2. cmake_minimum_required(VERSION 2.8)  
  3. set (OpenCV_DIR "/usr/local/opencv-3.1.0/build")  
  4. # Define project name  
  5. project(myTest)  
  6. # Find OpenCV, you may need to set OpenCV_DIR variable  
  7. # to the absolute path to the directory containing OpenCVConfig.cmake file  
  8. # via the command line or GUI  
  9. find_package(OpenCV REQUIRED)  
  10. # If the package has been found, several variables will  
  11. # be set, you can find the full list with descriptions  
  12. # in the OpenCVConfig.cmake file.  
  13. # Print some message showing some of them  
  14. message(STATUS "OpenCV library status:")  
  15. message(STATUS "    version: ${OpenCV_VERSION}")  
  16. message(STATUS "    libraries: ${OpenCV_LIBS}")  
  17. message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")  
  18. if(CMAKE_VERSION VERSION_LESS "2.8.11")  
  19.   # Add OpenCV headers location to your include paths  
  20.   include_directories(${OpenCV_INCLUDE_DIRS})  
  21. endif()  
  22. # Declare the executable target built from your sources  
  23. add_executable(demo demo.cpp)  
  24. # Link your application with OpenCV libraries  
  25. target_link_libraries(demo ${OpenCV_LIBS})  


【注意事项】

1、find_package(OpenCV REQUIRED)中的OpenCV一定要遵循该大小写。
  因为该句话是根据OpenCV作为前缀自动去/usr/local/share/OpenCV(如果你的opencv安装时,默认前缀设置为:/usr/local时)文件夹中去找OpenCVConfig.cmake,OpenCV-config.cmake 两个文件,进而确定你要引入的opencv头文件和库函数在哪里。

2、自定义引入相应opencv版本
  如果你有很多的opencv版本,尤其是一个是opencv2.x.x一个是opencv3.x.x,因为2和3在数据结构上有相对较大的变化,所以如果引入错误的版本可能导致程序的无法运行。因为find_package找默认路径下的OpenCV,但是很多时候安装多个版本的库的时候都会make install在opt目录下。、

  安装在opt的文件中会有share文件夹,这里面就有咱们需要的OpenCV文件夹,所以如果要自己有选择的控制版本,则在find_package这句话前面去设置opencv的OpenCV文件夹在哪里,添加set(OpenCV_DIR /opt/opencv-2.4.11/share/OpenCV)这句话。因为我的opencv2.4.11版本install在/opt/opencv-2.4.11文件夹下。这个可以根据你install的位置去变化。


cmake_minimum_required(VERSION 2.8)
project( DisplayImage )

#链接opencv2
set(OpenCV_DIR /usr/local/share/OpenCV)

find_package(OpenCV REQUIRED)

INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
# 添加头文件
include_directories( ${OpenCV_INCLUDE_DIRS} )

message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")


add_executable( DisplayImage DisplayImage.cpp )


target_link_libraries( DisplayImage ${OpenCV_LIBS} )











你可能感兴趣的:(opencv)