问题描述
由于OpenCV3在OpenCV2的基础上改动比较大,且向下支持不够好,所以,很多老工程需要用OpenCV2,而新工程又仅支持OpenCV3。如果两者同时安装也不冲突,本质上也就是一些三方库,放在/usr/local/lib
下面,但是如果使用FIND_PACKAGE(OpenCV REQUIRED)
的时候,其本质是去/usr/local/share
下面寻找cmake文件,而两个版本的cmake文件同名,所以必然时后安装的版本覆盖之前安装版本的cmake文件,这样一来使用起来就不太方便了(需要修改成普通的添加三方库的方法来使用),下面分享一个小方法使得其可以更方便使用。
默认大家已经有自己编译安装好的OpenCV(这里假设是OpenCV2)
一、opencv与contrib下载
下载OpenCV3的源码 opencv3.4.3和contrib
先去github上下载对应的opencv版本和opencv_contrib版本,我下载的是opencv3.4.3,所以contrib也要下载3.4.3版本。注意!版本一定一定一定一定要对应!要选择版本是在左上角Tag那里选。
tag:3.4.3那里找你要的版本
二、opencv3和contrib安装
1.安装依赖
$sudo apt-get install build-essential
$sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
依赖安装完成后,把contrib文件夹放入opencv目录下,并且创建build文件夹
这里为了方便我把文件夹重命名为opencv,contrib文件夹也重命名了。
2. 安装cmake-gui
网上大部分教程都是命令行直接安装,但是那串命令很多教程写的都不一样,感觉对我这样的新手来说还是直接图形界面安装方便,只需要鼠标点几下就好了,避免出错。
sudo apt-get install cmake-gui
3.安装配置opencv3与contrib模块
安装好之后,进入opencv文件夹里面的build文件夹,在这里打开终端,输入:
$cmake-gui ..
就会打开gui界面。
确定路径没问题之后点击configure
选择Unix Makefiles
,其余默认,点击finish。需要下载一些文件,要等待一段时间。然后CMake即载入默认配置,如下图所示:
这里需要对两个地方进行修改:
(1)在CMAKE_BUILD_TYPE
值处输入RELEASE
,其他保持不变(如果已经存在就不必修改)。
下方的CMAKE_INSTALL_PREFIX
显示了默认的安装目录,生成makefile文件最后执行 make install时就会安装到这个目录,这里可以根据个人需求更改。但是建议就按照默认路径来,不要乱改!(这里选择的安装为build文件夹下的installed(自己建的)
(2)在OPENCV_EXTRA_MODULES_PATH
处,选择输入目录(单击这一行后方空白处即可选中)
接着选择opencv_contrib文件夹中的modules文件夹,注意,不是只选中opencv_contrib文件夹就好了,需要点进去选中里面的modules文件夹! 如下图所示,我从左侧echo里进去选的,大家从自己安装位置选择就好。然后点Choose。
接着,这个过程需要一段时间,耐心等待一下。
另外需要在BUILD_opencv_world
后面打√
然后configure两次,变白色,再Generate生成配置文件
完成之后可以退出cmake-gui,在build目录下输入make,如下图所示:
看到100%就是成功啦!开森!!!!
最后sudo make install
,在对应目录下就有OpenCV3的头文件和库文件了。
多版本OpenCV切换
到这里就将现版本的OpenCV3和原有版本的OpenCV2安装在不同的目录,相对应的cmake文件也被安装在不同目录。那么在CMakeLists文件里面使用OpenCV3时,在FIND_PACKAGE(OpenCV REQUIRED)
的前面,加上set(OpenCV_DIR "/home/xiong/opencv-3.4.3/opencv-3.4.3/build")
这样系统就能够找到OpenCV3的头文件和库了,
示例如下:
project( test )
set(CMAKE_CXX_FLAGS "-std=c++11")#添加支持c++11标准
cmake_minimum_required(VERSION 2.6)#要求的CMAKE最低版本号为2.6
set(OpenCV_DIR "/home/xiong/opencv-3.4.3/opencv-3.4.3/build")
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( test test.cpp )
target_link_libraries( test ${OpenCV_LIBS} )
若要使用opencv2,CMakeLists中应该写:
#set(CMAKE_BUILD_TYPE "Debug")
PROJECT(speed_detection)#工程名为speed_detection,修改成自己的
cmake_minimum_required(VERSION 2.6)#要求的CMAKE最低版本号为2.6
set(OpenCV_DIR /home/xiong/opencv-2.4.9/release)#若CMAKE找不到opencv需要添加这一项,让opencv路径指向build文件夹(这里是release文件夹)
find_package(OpenCV REQUIRED)#找opencv库
include_directories( ${OpenCV_INCLUDE_DIRS} )#包含路径
add_executable(speed_detection main.cpp)#添加可执行文件main.cpp
target_link_libraries(speed_detection ${OpenCV_LIBS})#工程链接opencv库
target_link_libraries( test ${OpenCV_LIBS} )
到这里,举一反三即可。
https://blog.csdn.net/jindunwan7388/article/details/80397700
https://blog.csdn.net/m0_37797953/article/details/82013509
第一篇教程写的很详细,我基本上是按照他的步骤来的,但是最后出现了一点问题,之后根据第二篇教程改了一点点,问题成功解决!(哈哈哈其实我也是乱试的~)