Linux下编译OpenCV3总结

    xiaoxiao2021-12-14  14

    从源码编译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 12 12

    下载完以后,当前文件夹就会多了 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 1234 1234

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

    make sudo make install 12 12

    小试牛刀

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

    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 <opencv2/core/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <string> 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; } 123456789101112131415161718192021 123456789101112131415161718192021

    用下面的命令来编译:

    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)
    转载请注明原文地址: https://ju.6miu.com/read-972308.html

    最新回复(0)