OpenCV在Ubuntu16.04环境下编译安装PC和arm版本

在PC端和32位arm上安装OpenCV走了很多弯路,查了很多博主的资料,同时也记录下来整个过程,希望可以有帮助!!!
64位的arm上编译安装,仅供参考,手上还没有主板,没有尝试过。

文件准备

**

opencv-3.4.10.zip
opencv_contrib-3.4.10.zip

源码可以通过gitee快速下载方法


  git clone -b 3.4.10 https://gitee.com/mirrors/opencv.git
  git clone -b 3.4.10 https://gitee.com/mirrors/opencv_contrib.git

其他OpenCV版本源码也可以通过gitee快速下载,只需要把-b 后边的版本号更换一下即可。
下载解压完成后,检查是否为同一个版本。

依赖库安装

先安装以下依赖包


 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
 sudo apt-get install build-essential qt5-default ccache libv4l-dev libavresample-dev  libgphoto2-dev libopenblas-base libopenblas-dev doxygen  openjdk-8-jdk pylint libvtk6-dev
 sudo apt-get install pkg-config
 sudo apt-get isntall libvtk5-dev

编译安装,采用cmake指令:

PC版本,安装完后,得到64位的库文件,在ubuntu的qt下使用openCV库。

(1)解压下载好的包,并将opencv_contrib文件夹拷贝到OpenCV目录下,,同时在该目录下新建一个文件夹build:

  cp -r opencv_contrib opencv #复制opencv_contrib到opencv目录下
 cd opencv
 mkdir build                              #新建文件夹build

(2)现在进入到opencv目录下,查看文件结构:


 #cd opencv
 #ls

3rdparty  cmake            data     LICENSE               platforms
apps      CMakeLists.txt   doc      modules               README.md
build     CONTRIBUTING.md       include  opencv_contrib  
samples

(3)安装opencv3.4.10前,下载一些必要的文件

首先下载ippicv(https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20180723/ippicv), face_landmark_model.dat (https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat),这两个文件可以放置在ubuntu的任意一个文件夹下,然后修改相应的配置文件。

例如,将二者放在Downloads文件夹下,

首先修改ippicv:
$ gedit /home/usrname/opencv_path/opencv/3rdparty/ippicv/ippicv.cmake 
#记得usrname换成自己的用户名,opencv_path 换成自己opencv文件夹的路径,将ippicv.cmake文件下的#"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"替换为本地路径

"file:///home/usrname/Downloads/"
#file后面的路径换成对应ippicv下载后保存的路径
*******************************
然后修改 face_landmark_model.dat相关的配置文件
*******************************
$ gedit /home/usrname/tool/opencv-3.4.10/opencv_contrib-3.4.10/modules/face/CMakeLists.txt
#usrname 换成自己的用户名, <tool/opencv-3.4.0>换成自己opencv源码对应的文件夹
将CMakeLists.txt文件的第19行修改为本地路径,即将原来的网址#"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"
修改为下载的文件保存的路径
"file:///home/usrname/Downloads/"

其次下载标有红色框的文件,

已下载。
在这里插入图片描述
从网址下载的时候,可以存为txt文档,然后修改为图中名字,拷贝到…/opencv/opencv_contrib/modules/xfeatures2d/src$ ,
在这里插入图片描述

网址如下:
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_120.i”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_64.i”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_48.i”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_lbgm.i”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_256.i”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_128.i”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i”

“https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_hd.i”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_bi.i”
如果下载不了,可以采取些方法。

最后修改一下opencv2的包含路径,请用绝对路径,否则会出错。

主要再两个地方
1)

cd 
~/..../opencv/modules/stitching/include/opencv2/stitching/detail$ 
gedit matchers.hpp


#ifdef HAVE_OPENCV_XFEATURES2D
#include **"/home/petertang/Downloads/opencv/opencv_contrib/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp"**
**(这里用绝对地址)**
#endif

 cd /home/......./opencv/modules/stitching
 gedit CMakeList.txt

//在第一行添加

 INCLUDE_DIRECTORIES("/home/petertang/Downloads/opencv/opencv_contrib/modules/xfeatures2d/include")**

//**(这里用绝对地址)**,地址根据自己的文件位置,修改。
//括号一定要的,不能半个括号。。

在这里插入图片描述

(3)进入build目录,并且执行cmake生成makefile文件:
cd build

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/files/opencv/opencv_contrib/modules/ ENABLE_PRECOMPILED_HEADERS=OFF-D BUILD_EXAMPLES=ON -D CMAKE_CXX_FLAGS="-std=c++11" **.. (这里是空格两个点)//**

此外-D CMAKE_CXX_FLAGS="-std=c++11" 这一句尤其重要,一定要加,否则会报C++11 的错 !
注意:OPENCV_EXTRA_MODULES_PATH就是你 opencv_contrib下面的modules目录,请按照自己的实际目录修改地址。还有后面的两点不可省略!!

CMAKE_INSTALL_PREFIX=/usr/local 是安装目录,请按照自己的实际目录修改地址。

生成完毕提示:

--   Install path:                  /usr/local
--   cvconfig.h is in:              /home/files/opencv/build
-- -----------------------------------------------------------------
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/files/opencv/build

(4)在cmake成功之后,就可以在build文件下make了:

sudo make -j2   	#2线程编译 ,根据自己的机器情况选择,不加-j2也可
sudo make install

如果看到下图,说明成功了,再make install就ok了!
在这里插入图片描述
(5)链接库共享
编译安装完毕之后,为了让你的链接库被系统共享,让编译器发现,需要执行管理命令ldconfig:

sudo ldconfig -v  

然后,可以在qt的工程中配置即可。
在这里插入图片描述
按上述步骤,先下载,再CMake,没出现错误,顺利安装完毕。

32位 arm下的交叉编译安装

同样也是该下载下载,该修改修改。
不同的是安装交叉编译器、修改arm处理器、创建build的目录不一样、CMake的时候要做一些改动。
(1)安装交叉编译器
Cross compilation tools for ARM: gcc, libstc++, etc. Depending on target platform you need to choose gnueabi or gnueabihf tools. Install command for gnueabi:

 sudo apt-get install gcc-arm-linux-gnueabi
 sudo apt-get install g++-arm-linux-gnueabi
 # arm-linux-gnueabi-gcc -v 查看版本
 #   arm-linux-gnueabi-g++ -v

(2)修改配置文件


 cd /home/petertang/Downloads/opencv/platforms/linux
 gedit arm-gnueabi.toolchain.cmake//添加以下三句
 set(CMAKE_SYSTEM_PROCESSOR arm) //第一行
 set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc)//第三行
 set(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++)//第四行

(3)创建build和安装目录

**注意,build一定要创建在 /home/petertang/Downloads/opencv/platforms/linux/下
**
(4)编译安装
cd …/opencv/platforms/linux/build$
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/home/petertang/Downloads/opencv/arm_opencv -D OPENCV_EXTRA_MODULES_PATH=/home/petertang/Downloads/opencv/opencv_contrib/modules/ -D ENABLE_PRECOMPILED_HEADERS=OFF-D BUILD_EXAMPLES=ON -D CMAKE_CXX_FLAGS="-std=c++11" -DCMAKE_TOOLCHAIN_FILE=…/arm-gnueabi.toolchain.cmake …/…/… (这里都是2个点)

注意:-DCMAKE_TOOLCHAIN_FILE=…/arm-gnueabi.toolchain.cmake …/…/… 这里是(2)中的/home/petertang/Downloads/opencv/platforms/linux/arm-gnueabi.toolchain.cmake//

…/…/…(这里也要有)
CMake后,参考PC端安装过程。
然后可以在qt下使用了。
可以把lib文件移植到arm下。

64位 arm下的交叉编译安装

(1).Linux x86下安装ARM架构下的编译器


  sudo apt-get install g++-aarch64-linux-gnu
  sudo apt-get install gcc-aarch64-linux-gnu

下载后在终端输入以下指令查看编译器版本

 aarch64-linux-gnu-g++ -v`
 aarch64-linux-gnu-gcc -v

(2)opencv交叉编译

opencv的交叉编译工具链在…/opencv3.2.0/platforms/linux 路径下,linux文件夹下是一些.cmake文件,对应不同的移植对象,所以选择aarch64-gnu.toolchain.cmake 工具链,在进行编译前,需要修改cmake文件,修改platform/linux/aarch64-gnu.toolchain.cmake,改为如下:

  set(CMAKE_SYSTEM_PROCESSOR aarch64)
  set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
  set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
 set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
 set(GNU_MACHINE "aarch64-linux-gnu" CACHE STRING "GNU compiler
    triple")
  include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")
 // 3. set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
 //4. set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
 //3&&4这两句是后加的

(3)接下来执行交叉编译指令:

可参考32位arm的写法,修改toolchain文件,指定编译文件make install后保存路径
编译结束后,可查看include、lib等文件。

此外,还要配置环境
用gedit打开/etc/ld.so.conf

sudo gedit /etc/ld.so.conf

在文件中加上一行 /usr/local/…/lib
其中 /usr/local/…/是opencv安装路径也就是makefile中指定的安装路

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值