近两个月来接触了Linux系统,在老板的建议下翻了Ubuntu的牌子,我安装的版本是16.04,用习惯之后感觉蛮好的,比Windows要强。好啦,废话不说啦,下面开始说在Ubuntu中安装OpemCV+OpenCV_Contrib。
首先,准备一下开发环境:
- Ubuntu 16.04 64位
- cmake
- ant
- jdk
- git
- python
接下来,从github中down下OPenCV + OpenCV_Contrib库,可以从https://github.com/opencv上下载(注意版本对应),也可以通过指令下载(建议使用):
git clone https://github.com/Itseez/opencv.git
git clone https://github.com/Itseez/opencv_contrib.git
这个过程需要等待一段时间,具体依赖与你的网速啦,下载成功后,可以在你的home目录下看见opencv和opencv_contrib两个文件夹,将opencv_contrib目录移到opencv目录下。
在下载的过程中,我们可以添加opencv所需要的依赖库:
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
以上步骤完成后,我们进入opencv目录,创建build目录:
mkdir build
像这样:
进入build目录,开始编译,执行(注意后面的两个点不能少):
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..
编译结果为:
接下来,执行:
make -j8
得到的结果为:
到了这个时候,如果仅仅只需要在python或者C中使用OpenCV,就可以直接执行下一步了,如果需要在java中使用OpenCV,需要修改一些源文件。编辑features2d_manual.hpp文件,目录文件在/modules/features2d/misc/java/src/cpp中。
具体修改:
- 在第8行,在#include "features2d_converters.hpp"添加#include "opencv2/xfeatures2d.hpp"
- 在第121行,将
//case SIFT:
// name = name + "SIFT";
// break;
//case SURF:
// name = name + "SURF";
// break;改为
//case SIFT:
// fd=xfeatures2d::SIFT::create();
// break;
//case SURF:
// fd=xfeatures2d::SURF::create();
// break; - 在第248行,将
//case SIFT:
// name = name + "SIFT";
// break;
//case SURF:
// name = name + "SURF";
// break;改为
case SIFT:
de = xfeatures2d::SIFT::create();
break;
case SURF:
de = xfeatures2d::SURF::create();
break; - 在第257行,将
//case BRIEF:
// name = name + "BRIEF";
// break;改为
case BRIEF:
de = xfeatures2d::BriefDescriptorExtractor::create();
break; - 在第263行,将
//case FREAK:
// name = name + "FREAK";
// break;改为
case FREAK:
de = xfeatures2d::FREAK::create();
break;
修改完毕。
接下来,执行:
sudo make install
编译结果为:
这样,我们就可以在Ubuntu中使用OPencv了,适用于各种语言。
我们可以在/usr/local/lib下看见opencv编译的结果:
最后,简单说一下在各个语言下的使用:
- python:直接导入cv2的库就可以啦
import cv2
这里面编译的时候要注意python2和python3的区别,python2编译的opencv在python3中是不可以使用的
- C++:我使用的是QT,在pro文件中添加
INCLUDEPATH += \
/usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2 \ LIBS += \
/home/fanxuan/opencv/build/lib/libopencv_java331.so \ - Java:我说使用的是IDEA,将opencv/build/lib目录设置在IDEA设置位jvm的运行空间即可。
最后的最后,老样子,代码没有啦,大家可以看一下opencv自带的例子,或者转到www.baidu.com或者github.com。
感谢外国友人https://elbauldelprogramador.com/en/how-to-compile-opencv3-nonfree-part-from-source/博客在我探索过程中给我带来的帮助。