ubuntu编译opencv3和opencv2共存
来源:互联网 发布:linq 删除重复数据 编辑:程序博客网 时间:2024/05/22 08:16
第一步:更新驱动
ubuntu 16.04的更新管理器集成了驱动更新,选择安装nivdia的驱动
- 1
第二步:安装cuda
sudo apt-get install nvidia-cuda-toolkit
- 1
cuda是7.5.18版,安装完后重启,在终端输入nivdia-smi,有结果则驱动和cuda安装成功。但是cuda只支持gcc5.0以下,即使后续用cmake编译opencv成功,gpu还是无法调用
- 1
- 2
- 3
第三步:强制取消cuda的gcc版本检查
注释掉host_config.h中关于gcc版本的检查,版本大于5则返回错误
//#if __GNUC__ > 5//#error -- unsupported GNU version! gcc versions later than 5 are not supported!//#endif /* __GNUC__ > 5 */
- 1
- 2
- 3
- 4
通过nvidia-cuda-toolkit安装的,host_config.h在 /usr/include/下,如果通过cuda的run文件安装,也会因为gcc版本检查提示错误,也要修改对应位置的host_config.h
法二:通过修改gcc版本降级
- 1
- 2
第四部:安装opencv相关的库
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev libtbb-dev libboost-dev libeigen3-devsudo apt-get install libxml2-dev libxslt-dev libffi-dev libsdl1.2-dev libssl-dev libboost-all-dev
- 1
- 2
- 3
- 4
- 5
第五步:cmake编译
安装cmake-gui
相关选项:
- 添加opencv-contrib模块
- CUDA_GENERATION模式设定为auto,不是kepler。 我的显卡 Compute Capability是5.0,kepler默认3.0(3.5),导致编译之后的opencv调用cuda,出现api不符合,因为CUDA_ARCH_BIN与电脑显卡不一致,具体请查看,确认CUDA_ARCH_BIN与你显卡的Compute Capability一致,如果不一致,CUDA_GENERATION请选择auto或者空白,然后填入显卡对应的Compute Capability
- 添加tbb,ipp最好提前下载,解压放/opencv-3.1.0/3rdparty/ippicv/中,
- 勾选CUBLAS,Eigen,ipp,opengl,注意编译之前确保numpy已经安装,否则最后不会生成cv2.so
- 强烈建议:如果准备opencv2.4.和opencv3.1切换使用,(毕竟opencv3.1实现了很多新论文相关算法,opencv2.4也比较常见),请进行如下设置:
修改cmake_install_prefix,opencv3.1 安装目录/usr/local/opencv3,opencv2.4 安装目录/usr/local/opencv2,在cmake-gui中可以搜索cmake_install_prefix,修改。注意如果准备切换opencv版本,一定不要选择默认路径,否则,链接opencv的时候会因为多版本的lib发生链接冲突。
- 1
- 2
- 3
- 4
- 5
configure以及generate,生成的build下面
make -j4 //多线程编译sudo make install
- 1
- 2
第六步:跳过系统环境变量的设置,设置/etc/profile和~/.bashrc导致同时使用不同版本时发生错误,所以跳过;
配置终端的环境变量,不同的终端设置不同的opencv
步骤:
打开终端,需要运行opencv3的,注意/usr/local/opencv3为opencv3.1的安装目录
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv3/lib/pkgconfigexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv3/lib
- 1
- 2
相应的,需要运行opencv2的,注意/usr/local/opencv2为opencv2.4*的安装目录
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv2/lib/pkgconfigexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv2/lib
- 1
- 2
pkgcongfig中的有opencv.pc保存有对应opencv的include和lib路径,但是sudo ldconfig后生效,
可以用下列三个命令验证
pkg-config --modversion opencv pkg-config --cflags opencv pkg-config --libs opencv
- 1
- 2
- 3
优点:
可以不同版本的opencv同时编译;
缺点:
每个终端下运行opencv 都要设置对应的环境变量,新建终端默认没有opencv的环境变量需要从重新设置。
第七步:CMakeLists的一点点修改
因为usr/local/opencv3/share/OpenCV/OpenCVConfig.cmake中设置了opencv的配置,自定义路径安装opencv时,找不到这个文件OpenCVConfig.cmake,opencv-config.cmake
需要在项目的CMakeList.txt中添加OpenCVConfig.cmake的路径
set(CMAKE_PREFIX_PATH "/usr/local/opencv3/share/OpenCV")
- 1
根据自定义的opencv路径修改。
error:1 /usr/include/string.h:652:42: error: ‘memcpy’ was not declared in this scope
- 1
原因g++版本太新了,兼容一下,在出现上面错误时,在CMakeLists.txt中前面几行添加
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES")
- ubuntu编译opencv3和opencv2共存
- ubuntu下opencv3和opencv2共存
- Ubuntu下OpenCV2和OpenCV3共存的方法
- Ubuntu OpenCV2.4.13与OpenCV3.1.0共存
- OpenCV2与OpenCV3共存
- ubuntu 14.04 下同时安装OpenCV2.4.8和OpenCV3.2,版本共存切换
- Ubuntu14.04下opencv3和opencv2共存和使用方法
- Ubuntu14.04 opencv2.4.8和opencv3.1.0共存
- Ubuntu14.04 opencv2.4.8和opencv3.2多版本共存
- Ubuntu14.04 opencv2.4.8和opencv3.3.1多版本共存
- 关于Ubuntu同时安装opencv2和opencv3
- Ubuntu同时安装OpenCV2和OpenCV3
- oencv2和opencv3 共存。
- Ubuntu14.04 ROS自带opencv2.4.8和opencv3.1多版本共存
- vs2015编译opencv2.4.10和opencv3.10源码(64位)
- ubuntu下opencv2.4.9和opencv3.1.0的使用
- ubuntu 14.04 opencv2 和opencv3 多个版本切换使用
- ubuntu下安装opencv2和opencv3 多版本共用
- VUE(一)
- 获取当前页面的类(最上层的类)
- Makefile经典教程(掌握这些足够)
- Map接口
- 深入理解 JavaScript 作用域和作用域链
- ubuntu编译opencv3和opencv2共存
- PPT2016内嵌Excel的动态图表
- javasctipt常用方法总结
- 集合中的快速失败
- 解决Android Button 字母自动全部大写的问题
- Template、ItemsPanel、ItemContainerStyle、ItemTemplate
- swift 中使用扩展实现代理
- [BZOJ]1069 [SCOI2007] 最大土地面积 凸包 + 旋转卡壳
- Sublime Text3安装