由于OpenCV3在OpenCV2的基础上改动比较大,且向下支持不够好,所以,很多老工程需要用OpenCV2,而新工程又仅支持OpenCV3。如果两者同时安装也不冲突,本质上也就是一些三方库,放在/usr/local/lib下面,但是如果使用FIND_PACKAGE(OpenCV REQUIRED)的时候,其本质是去/usr/local/share下面寻找cmake文件,而两个版本的cmake文件同名,所以必然是后安装的版本覆盖前安装版本的cmake文件,这样一来使用起来就不太方便了(需要修改成普通的添加三方库的方法来使用),下面分享一个小方法使得其可以更方便使用。
- 默认大家已经有自己编译安装好的OpenCV(这里假设是OpenCV2)
- 下载OpenCV3的源码 opencv3.2 我选择了最新的3.2版本,和3.1差别不大。
- 使用cmake-gui将CMAKE_INSTALL_PREFIX修改成/usr/local/opencv3。
- 之后generate,再make和sudo make install,在对应目录下就有OpenCV3的头文件和库文件了。
到这里就将现版本的OpenCV和原有版本的OpenCV安装在不同的目录,相对应的cmake文件也被安装在不同目录。那么在CMakeList文件里面使用OpenCV3时,在FIND_PACKAGE(OpenCV REQUIRED)的前面,
set(OpenCV_DIR "usr/local/opencv3/share/OpenCV3"
这样系统就能够找到
OpenCV3的头文件和库了,如果继续使用
OpenCV2,不添加这句,系统会去默认目录
/usr/local/share下面找
OpenCV2即可
。
Q1:如果出现libopencv_XXX.so.3.2: cannot open shared object file: No such file or directory,怎么办?
A1:
Q1:如果出现libopencv_XXX.so.3.2: cannot open shared object file: No such file or directory,怎么办?
A1:
- 进入目录:/etc/ld.so.conf.d、
- 打开(创建)Opencv.conf
- 添加 /usrlocal/opencv3/lib
- 执行ldconfig即可。
Q2:如果头文件里面出现某个函数未声明的问题。
A1: 这是因为Opencv3不能很好的对Opencv2进行兼容,需要使用Opencv3的头文件,如果是使用Qt Creator,那就在pro文件内增加
INCLUDEPATH += /usr/local/opencv3/include/