解决ubuntu16.04 opencv2与opencv3共存问题

问题描述

由于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那里选。
下载opencv
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

第一篇教程写的很详细,我基本上是按照他的步骤来的,但是最后出现了一点问题,之后根据第二篇教程改了一点点,问题成功解决!(哈哈哈其实我也是乱试的~)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值