ubuntu16下同时安装opencv2和opencv3
在使用HOG特征+SVM分类器运行时,报错:
error: ‘class MySVM’ has no member named ‘decision_func’
查了一下原因,程序使用的版本为opencv2.4.13版本,ros kinetic默认配置了opencv3.0的库,所以直接编译会报错。不想改程序所以直接在opencv3基础上添加一个opencv2.
参考
安装步骤
-
可以首先查看当前的opencv版本
pkg-config --modversion opencv
-
从官网上下载需要的opencv的版本(我下载的是opencv2.4.11)opencv官网
-
找个地方解压,可以解压到通常在的主目录,我解压在主目录下了/home//opencv2/
-
执行如下代码
#首先安装依赖(但是这个依赖不知道是否必须要安装) sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev #进入opencv的安装包内 cd opencv2 #后续如下按步执行即可 mkdir release cd release mkdir installed #创建的installed文件集就是我们安装opencv2.4.13的路径,之前安装的opencv3.4的默认安装路径是/usr/local/,所以在cmake的时 候要指定安装路径。 #cmake指定路径 cmake -DCMAKE_INSTALL_PREFIX=/home/opencv2/release/installed -DCMAKE_BUILD_TYPE="Rlease" .. make sudo make install
编译过程需要经过漫长的等待,期间会出现几个警告可以忽略。
切换不同版本的opencv
-
首先查看安装情况在/home/lskk/opencv2/release/installed/lib中找到是否有pkgconfig文件夹。如果没有可能是上述步骤出现问题。
-
修改.bashrc文件
#打开./bashrc文件 sudo gedit ~/.bashrc
在文件最后添加(需要该成自己的文件路径)
export PKG_CONFIG_PATH=/home/lskk/opencv2/release/installed/lib/pkgconfig export LD_LIBRARY_PATH=/home/lskk/opencv2/release/installed/lib
-
此时重新打开终端查看opencv版本会变成opencv 2.4.11,想切换回来把这两和使用#注释掉即可
C++工程中切换opencv
这部分我也比较模糊,网上说的需要在Cmakelist.txt文件中修改,但是我一个工程有好几个Cmakelist.txt文件,而且不知道修改在那一部分,但是我最后编译通过了。如下是我修改过的内容
- 首先是工程文件第一级的src文件中有一个Cmakelist.txt文件是个只读文件。
修改如下:
-
然后在功能包track_pkg中还有一个src文件,其下还有一个Cmakelist.txt文件。其中本来的语句是
find_package(OpenCV REQUIRED)
如果想要切换到opencv2的话需要修改成:
set(CMAKE_PREFIX_PATH "/home/opencv2/release/installed/") find_package(OpenCV REQUIRED) include_directories( ${OpenCV_INCLUDE_DIRS} )
想修改回来反向操作应该可以。
如果上述过程大佬发现有不对的地方,请不吝赐教,不胜感激