开发环境
- Ubuntu 16.04 64位
- Opencv 2.4.13(或者其他版本,同样适用于Opencv3)
准备
下载
从此处下载源文件,这里要选择Sources
,用于编译
添加opencv所需要的依赖库
1 | sudo apt-get install build-essential |
创建build文件夹
1 | mkdir build |
编译
开始编译,执行(注意后面的两个点不能少):
1 | cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules .. |
若不想编译cuda
版本的opencv,则改为
1 | cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D WITH_CUDA=OFF .. |
编译结果为:
接下来,执行:
1 | 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行,将
1 | //case SIFT: |
改为
1 | //case SIFT: |
在第248行,将
1 | //case SIFT: |
改为
1 | case SIFT: |
在第257行,将
1 | //case BRIEF: |
改为
1 | case BRIEF: |
在第263行,将
1 | //case FREAK: |
改为
1 | case FREAK: |
修改完毕。
接下来,执行:
1 | sudo make install |
编译结果为:
这样,我们就可以在Ubuntu中使用Opencv
了,适用于各种语言。
我们可以在/usr/local/lib
下看见opencv编译的结果:
配置环境
对于C++调用C++的时候,出现了如下错误
1 | ./resize: error while loading shared libraries: libopencv_highgui.so.3.4: cannot open shared object file: No such file or directory |
解决办法:
1)修改ld的配置文件
1 | sudo gedit /etc/ld.so.conf |
加入
1 | include /usr/loacal/lib |
注(/usr/loacal是opencv编译时设置的路径)
2) 再运行ldconfig
1 | sudo ldconfig |
3) 永久生效
修改bash.bashrc
文件
1 | sudo vim /etc/bash.bashrc |
在文件末尾加入:
1 | PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig |
或者在
/etc/ld.so.conf.d/
下面新建一个opencv.conf
,里面写入/usr/local/lib
,最后执行下sudo ldconfig -v
即可。
调用
Python
直接导入cv2的库就可以啦
1 | import cv2 |
这里面编译的时候要注意Python2和Python3的区别,Python2编译的opencv在Python3中是不可以使用的。
C++
对于QT
在pro
文件中添加
1 | INCLUDEPATH += \ |
普通C++程序
首先简单说下pkg-config
命令,pkg-config
当你从源代码编译软件时,用来提供依赖库的信息的软件
终端输入
1 | pkg-config opencv --libs --cflags |
显示
就可以看到编译和链接所需要的头文件目录和库文件目录。
如果发现不正确,可以修改/usr/local/lib/pkgconfig/opencv.pc
文件,这个文件就是opencv的目录配置,目录截图为:
这个文件就记录着opencv库的版本、编译参数、链接参数等信息
根目录下,具有几个文件,tcp_client.cpp
和tcp_client.h
和main.cpp
Makefile
文件
1 | CC = gcc |
Java
我说使用的是IDEA,将opencv/build/lib目录设置在IDEA设置位jvm的运行空间即可。
参考
OpenCV - Linux(Ubuntu 16.04)中安装OpenCV + OpenCV_Contrib
ubuntu 编译运行 opencv C++ 项目
Ubuntu下程序的编译和链接过程和openCV的makefile文件