Ubuntu上用cmake编译安装OpenCV

完整人脸识别系统(源码+教程+环境):

开源毕业设计:基于嵌入式ARM-Linux的应用OpenCV和QT实现的人脸识别系统(源码+论文)

完全毕设教程:Linux上Opencv与Qt实现的人脸识别的考勤点名/门禁系统(PC与嵌入式ARM版本)

 

本文采用环境:Ubuntu14.04 + OpenCV-3.4.0

兼容OpenCV-2.4.xxx   OpenCV-3.xx

 

 

一、源码准备:opencv、cmake

 

1、opencv官网 https://opencv.org/ 下载源码包:opencv-3.4.0.tar.gz

2、cmake官网 https://cmake.org/ 下载源码包:cmake-3.10.2.tar.gz

 

二、安装cmake

1、解压源码、进入解压后的目录

    $ tar -zxvf cmake-3.10.2.tar.gz

    $ cd cmake-3.10.2

 

2、读README.rst文档,按说明操作:

解读:首先要有C++编译器,而且要支持C++11标准的(g++版本太低会出错,请自行升级);然后运行$ ./bootstrap 脚本进行配置,可以使用一些项如“--help”、“--prefix”(安装目录); bootstrap成功后,执行$ make  $ make install。

总之,就三个命令:

$ ./bootstrap    

$ make    

$ sudo make install

安装完成,检测下: 

$ cmake --version

搞定,就是这么简单。

 

PS:据说还有一种更简单粗暴的方法:

$ sudo apt-get install cmake  

 

三、安装依赖库

$ sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libtiff4-dev libswscale-dev libjasper-dev

备注:若提示libtiff4-dev失败,则尝试libtiff5-dev(根据出错信息提示)。

 

四、安装Opencv

 

1、解压源码、进入解压后的目录

    $ tar -zxvf opencv-3.4.0.tar.gz

    $ cd opencv-3.4.0

 

2、创建编译文件夹build,进入build

    $ mkdir build

    $cd build

 

3、执行以下命令,CMAKE_INSTALL_PREFIX=路径,"..": CMakeLists.txt路径(解压后的opencv中)
 

    $ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

 

这一步,在3.2.0版本时出了点意外,会出现以下错误:

-- ICV: Downloading ippicv_linux_20151201.tgz...
CMake Error at 3rdparty/ippicv/downloader.cmake:73 (file):
  file DOWNLOAD HASH mismatch

    for file: [/root/library/opencv/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz]
      expected hash: [808b791a6eac9ed78d32a7666804320e]
        actual hash: [d41d8cd98f00b204e9800998ecf8427e]
             status: [1;"Unsupported protocol"]

Call Stack (most recent call first):
  3rdparty/ippicv/downloader.cmake:110 (_icv_downloader)
  cmake/OpenCVFindIPP.cmake:243 (include)
  cmake/OpenCVFindLibsPerf.cmake:37 (include)
  CMakeLists.txt:558 (include)


CMake Error at 3rdparty/ippicv/downloader.cmake:77 (message):
  ICV: Failed to download ICV package: ippicv_linux_20151201.tgz.
  Status=1;"Unsupported protocol"
Call Stack (most recent call first):
  3rdparty/ippicv/downloader.cmake:110 (_icv_downloader)
  cmake/OpenCVFindIPP.cmake:243 (include)
  cmake/OpenCVFindLibsPerf.cmake:37 (include)
  CMakeLists.txt:558 (include)


-- Configuring incomplete, errors occurred!
See also "/root/library/opencv/opencv-3.2.0/build/CMakeFiles/CMakeOutput.log".
See also "/root/library/opencv/opencv-3.2.0/build/CMakeFiles/CMakeError.log".

 

百度查了下:安装opencv的过程中要下载ippicv_linux_20151201.tgz,由于网络的原因,这个文件经常会下载失败。

解决方法: 

    1.手动下载 ippicv_linux_20151201.tgz ; 可以百度一下,一大堆。

    2.创建 opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ 目录

   不要照抄!!! 该目录根据输出的错误信息选择创建,如上:(特意将那么多行的错误信息贴出来,就是为了说明这点)

 

for file: [/root/library/opencv/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz]

    3.将下载的文件放置该目录下;

    4.重新执行 cmake 命令即可。

 

4、编译  (未知错误:Ubuntu1204出错,1404正常;猜测可能是依赖库的版本问题)

    $ make

 

5、安装

        $ make install

 

6、添加动态库路径配置,使运行时能找到动态库

    $ vi /etc/ld.so.conf.d/opencv.conf      (文件或为空,新创建)

    添加:/usr/local/lib

    $ ldconfig        //使生效

    或将库路径添加到LD_LIBRARY_PATH环境变量试下。

 

7、配置bash,添加库路径到PKG_CONFIG_PATH

    $ vi /etc/bash.bashrc

    文末添加以下两行:

    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

    export PKG_CONFIG_PATH

    $ source /etc/bash.bashrc    //使生效

 

五、测试

使用自带测试用例,在samples/cpp/example_cmake下

 

有兴趣的可以阅读下example_cmake下 CMakeLists.txt 是如何写的,里面有大量注释。

    $ cmake .

    $ make

    $ ./opencv_example

 

若出现如下报错信息:


Built with OpenCV 4.2.0
[ WARN:0] global /data/lib_src/opencv-4.2.0/modules/videoio/src/cap_v4l.cpp (887) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
No capture
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.2.0) /data/lib_src/opencv-4.2.0/modules/highgui/src/window.cpp:651: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'

Aborted (core dumped)

则很不幸,它告诉你要安装libgtk2.0-dev and pkg-config,那你就安装吧;

安装完还是不行,那就要重新编译安装opencv了,重装后就可以了(亲测有效!)。

因为那几个依赖库要在编译安装opencv之前装好!!!

 

1、无摄像头环境:

Built with OpenCV 3.4.0
No capture

 

2、有摄像头环境:

Built with OpenCV 3.4.0
Capture is opened
select timeout
select timeout
OpenCV Error: Assertion failed (total() == 0 || data != __null) in Mat, file /root/library/opencv/opencv-3.4.0/modules/core/include/opencv2/core/mat.inl.hpp, line 500
terminate called after throwing an instance of 'cv::Exception'
  what():  /root/library/opencv/opencv-3.4.0/modules/core/include/opencv2/core/mat.inl.hpp:500: error: (-215) total() == 0 || data != __null in function Mat

已放弃 (核心已转储)

 

运行出错:打开摄像头超时!!!

尚未找到原因,先搁置一边。

此问题已解决,详见【虚拟机Ubuntu打开摄像头失败及OpenCV打开摄像头超时的问题】!!!

解决问题后的效果:

 

篇后话:

opencv安装好了,下篇将开始写第一个opencv工程。

 

备注:参考博客 http://blog.csdn.net/cocoaqin/article/details/78163171

 

 

  • 6
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值