在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:
git clone -b 3.4.10 https:
其他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
编译安装,采用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下载后保存的路径
$ 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/"
usrname记得替换为自己的用户名,路径记得替换为自己文件对应的路径
其次下载标有红色框的文件,
已下载。 从网址下载的时候,可以存为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 …/…/…
注意:-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)接下来执行交叉编译指令:
可参考32位arm的写法,修改toolchain文件,指定编译文件make install后保存路径 编译结束后,可查看include、lib等文件。
|