Linux下编译OpenCV3总结

从源码编译OpenCV3

OpenCV于2015年6月4号,在其官网上正式发布了最新的OpenCV version 3.0版本,貌似有挺多的更新。由于我要用到contrib模块的文本检测工具,所以打算重新编译一下。

首先,我们来到 OpenCV 在 Github 上的主页,就可以看到 http://githu.com/Itseez 下有 opencv(主项目),opencv_extra(额外的数据),opencv_contrib(非正式发行的模块),copencv_3rdparty(用到的第三方库),等等子项目。我要用到的 text detection 算法就在 contrib 里面。


直接用终端下的Git命令下载下来这两个 repository

git clone https://github.com/Itseez/opencv.git
git clone https://github.com/Itseez/opencv_contrib.git
 
   
   
   
   
  • 1
  • 2
  • 1
  • 2

下载完以后,当前文件夹就会多了 opencv 和 opencv_contri 两个文件夹,和 Github 上一毛一样的。

接着我们要新建一个文件夹,叫 release 好了,我们要在这个文件夹下编译和安装 OpenCV,Linux下命令如下:

mkdir release && cd release
 
   
   
   
   
  • 1
  • 1

然后,我们要用 cmake 这个工具来编译整个项目的源文件,放心,makefile 什么的已经都给配置好了,我们只需要运行 cmake 命令,加一些我们要的参数就好了。

cmake 有一个参数为 -D,后可以跟变量名和赋的值,如 cmake -D CMAKE_BUILD_TYPE=RELEASE 表示我们要编译 release 版本。这里由于我要额外编译 contrib 模块,所以要告诉 cmake。最终这些东西会写进去CMakeCache.txt中。命令如下:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    ../opencv
 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

知道了要编译哪些东西,和编译的配置,我们就可以执行编译和安装了,运行下面两个命令,就开始慢慢等吧,我这里不到十分钟就好了,挺快的!编译会输出一堆红红绿绿的信息和进度等,编译完注意看最后的几行,有没有提示你出错。第二条命令要root权限,因为我们要把一些文件拷贝进系统文件夹下面。

make
sudo make install
 
   
   
   
   
  • 1
  • 2
  • 1
  • 2

小试牛刀

我们下来看看,编译完以后,会有什么变化。运行下面的命令:

pkg-config --cflags --libs opencv
 
   
   
   
   
  • 1
  • 1

于是会输出一堆的 -I/usr/local/include/opencv -L/usr/local/lib -lopencv_text 等,这些都是我们可引用的 OpenCV 静态库路径,熟悉 g++ 的同学知道这里的不同参数之间的区别。有兴趣的可以去深究。

我们来尝试编译一个opencv文件,如 ./opencv/samples/cpp/tutorial_code/introduction/display_image 下的 display_image.cpp 文件,源代码列出来吧:

#include 
#include 
#include 

#include 
#include 

using namespace std;
using namespace cv;

int main(int argc, char **argv) {
    // 读取图片
    Mat img = imread(argv[1])
    // 创建一个窗口
    namedWindow("display window", WINDOW_AUTOSIZE);
    // 在窗口里显示该图片
    imshow("display window", img);
    // 等待键盘输入
    waitKey(0);
    return 0;
}
 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

用下面的命令来编译:

g++ display_image.cpp -o display_image `pkg-config --cflags --libs opencv`
 
   
   
   
   
  • 1
  • 1

注意最右边的符号 ` 不是引号,而是键盘上 1 左边的那个。这是 shell 的语法,我就不多说了。

编译没有报错的话,就可以运行试试看了

./dispaly_image ./fish.jpg
 
   
   
   
   
  • 1
  • 1

然后你的 fish.jpg 图片就会显示在窗口中。


Python-OpenCV

当然,有时候,我们想用 OpenCV 的 Python 接口,那样子开发更方便。在 ./opencv/samples/python2/ 文件夹下面,有很多的例子,没事可以跑着玩玩。比如说:

python opt_flow.py
 
   
   
   
   
  • 1
  • 1

就可以运行一个叫做光流算法的程序,听说可以检测运动的物体,我也不懂是干啥,但是觉得 Demo 好炫,好厉害有木有! OpenCV 真是太强大了。

平常我们学习的时候,可以多看看这些例子,非常有助于我们学习代码。官网的 tutorials + API Reference ,加上这些例子,不比读一本教程书来的简单。实际上,我更喜欢前者。

Python 有很好的文档机制,用 help 函数,直接在 terminal 里,就可以输出文档。 help的参数可以是函数名,也可以是变量。

import cv2
print help(cv2.imread)

img = cv2.imread('1.jpg')
print help(img)

你可能感兴趣的:(opencv)