一、环境介绍

ubuntu版本:  VM虚拟机运行ubuntu18.04 64位

OpenCV 版本:  3.4.9

目标开发板: RK3399

二、相关源码包下载地址

OpenCV源码下载地址: https://opencv.org/releases/ image.png

选择3.4.9版本下载。

aarch64- linux -交叉编译器下载地址: https://download.csdn.net/download/xiaolong1126626497/12203205

三、编译OpenCV源码

3.1 安装cmake

wbyq@wbyq:~/work$ cmake-gui
Command 'cmake-gui' not found, but can be installed with:
sudo snap install cmake         # version 3.16.5, or
sudo apt  install cmake-qt-gui
See 'snap info cmake' for additional versions.
wbyq@wbyq:~/work$ 

没有cmake就执行下的命令安装。

wbyq@wbyq:~/work/opencv-3.4.9/_install$ sudo apt-get install cmake
wbyq@wbyq:~/work/opencv-3.4.9/_install$ sudo apt  install cmake-qt-gui
wbyq@wbyq:~/work/opencv-3.4.9/_install$ sudo apt-get install libgtk2.0-dev
wbyq@wbyq:~/work/opencv-3.4.9/_install$ sudo apt-get install pkg-config

image.png

3.2 解压OpenCV源码

wbyq@wbyq:~/work$ unzip /mnt/hgfs/linux-share-dir/opencv-3.4.9.zip 
wbyq@wbyq:~/work$ ls
arm-linux-gcc  opencv-3.4.9  rk3399
wbyq@wbyq:~/work$ cd opencv-3.4.9/
wbyq@wbyq:~/work/opencv-3.4.9$ ls
3rdparty  apps  cmake  CMakeLists.txt  CONTRIBUTING.md  data  doc  include  LICENSE  modules  platforms  README.md  samples

3.3 配置cmake编译opencv

在源码目录下创建一个_install文件夹用于存放编译之后的文件

wbyq@wbyq:~/work/opencv-3.4.9$ mkdir _install
wbyq@wbyq:~/work/opencv-3.4.9$ cmake-gui

选择 OpenCV 源码文件夹和存放编译文件的文件夹。

image.png

image.png

下一步之后选择编译器配置。

image.png

image.png

完成点击Finish,接下来cmake就会加载配置。

image.png

完成步骤之后,关闭图像配置界面,进入到 源码安装目录 下,看是否生成了Makefile文件。

image.png

接下来就进行编译安装了。

byq:~/work/opencv-3.4.9/_install$ make && make install

编译完成:

image.png

wbyq@wbyq:~/work/opencv-3.4.9/_install$ 
wbyq@wbyq:~/work/opencv-3.4.9/_install$ cd install/
wbyq@wbyq:~/work/opencv-3.4.9/_install/install$ ls
bin  include  lib  share
wbyq@wbyq:~/work/opencv-3.4.9/_install/install$ tree
├── bin
│   ├── opencv_annotation
│   ├── opencv_createsamples
│   ├── opencv_interactive-calibration
│   ├── opencv_traincascade
│   ├── opencv_version
│   ├── opencv_visualisation
│   └── setup_vars_opencv3.sh
├── include
│   ├── opencv
│   │   ├── cvaux.h
│   │   ├── cvaux.hpp
│   │   ├── cv.h
│   │   ├── cv.hpp
│   │   ├── cvwimage.h





    
│   │   ├── cxcore.h
│   │   ├── cxcore.hpp
│   │   ├── cxeigen.hpp
│   │   ├── cxmisc.h
│   │   ├── highgui.h
│   │   └── ml.h
│   └── opencv2
│       ├── calib3d
│       │   ├── calib3d_c.h
│       │   └── calib3d.hpp
│       ├── calib3d.hpp
│       ├── core
│       │   ├── affine.hpp
│       │   ├── async.hpp
│       │   ├── base.hpp
│       │   ├── bindings_utils.hpp
│       │   ├── bufferpool.hpp
│       │   ├── check.hpp
│       │   ├── core_c.h
│       │   ├── core.hpp
│       │   ├── cuda
│       │   │   ├── block.hpp
│       │   │   ├── border_interpolate.hpp
│       │   │   ├── color.hpp
│       │   │   ├── common.hpp
│       │   │   ├── datamov_utils.hpp
│       │   │   ├── detail
│       │   │   │   ├── color_detail.hpp
│       │   │   │   ├── reduce.hpp
│       │   │   │   ├── reduce_key_val.hpp
│       │   │   │   ├── transform_detail.hpp





    
│       │   │   │   ├── type_traits_detail.hpp
│       │   │   │   └── vec_distance_detail.hpp
│       │   │   ├── dynamic_smem.hpp
│       │   │   ├── emulation.hpp
│       │   │   ├── filters.hpp
│       │   │   ├── funcattrib.hpp
│       │   │   ├── functional.hpp
│       │   │   ├── limits.hpp
│       │   │   ├── reduce.hpp
│       │   │   ├── saturate_cast.hpp
│       │   │   ├── scan.hpp
│       │   │   ├── simd_functions.hpp
│       │   │   ├── transform.hpp
│       │   │   ├── type_traits.hpp
│       │   │   ├── utility.hpp
│       │   │   ├── vec_distance.hpp
│       │   │   ├── vec_math.hpp
│       │   │   ├── vec_traits.hpp
│       │   │   ├── warp.hpp
│       │   │   ├── warp_reduce.hpp
│       │   │   └── warp_shuffle.hpp
│       │   ├── cuda.hpp
│       │   ├── cuda.inl.hpp
│       │   ├── cuda_stream_accessor.hpp
│       │   ├── cuda_types.hpp
│       │   ├── cv_cpu_dispatch.h
│       │   ├── cv_cpu_helper.h
│       │   ├── cvdef.h
│       │   ├── cvstd.hpp





    
│       │   ├── cvstd.inl.hpp
│       │   ├── detail
│       │   │   ├── async_promise.hpp
│       │   │   └── exception_ptr.hpp
│       │   ├── directx.hpp
│       │   ├── eigen.hpp
│       │   ├── fast_math.hpp
│       │   ├── hal
│       │   │   ├── hal.hpp
│       │   │   ├── interface.h
│       │   │   ├── intrin_avx512.hpp
│       │   │   ├── intrin_avx.hpp
│       │   │   ├── intrin_cpp.hpp
│       │   │   ├── intrin_forward.hpp
│       │   │   ├── intrin.hpp
│       │   │   ├── intrin_msa.hpp
│       │   │   ├── intrin_neon.hpp
│       │   │   ├── intrin_sse_em.hpp
│       │   │   ├── intrin_sse.hpp
│       │   │   ├── intrin_vsx.hpp
│       │   │   ├── intrin_wasm.hpp
│       │   │   ├── msa_macros.h
│       │   │   └── simd_utils.impl.hpp
│       │   ├── ippasync.hpp
│       │   ├── mat.hpp
│       │   ├── mat.inl.hpp
│       │   ├── matx.hpp
│       │   ├── neon_utils.hpp
│       │   ├── ocl_genbase.hpp
│       │   ├── ocl.hpp





    
│       │   ├── opencl
│       │   │   ├── ocl_defs.hpp
│       │   │   ├── opencl_info.hpp
│       │   │   ├── opencl_svm.hpp
│       │   │   └── runtime
│       │   │       ├── autogenerated
│       │   │       │   ├── opencl_clamdblas.hpp
│       │   │       │   ├── opencl_clamdfft.hpp
│       │   │       │   ├── opencl_core.hpp
│       │   │       │   ├── opencl_core_wrappers.hpp
│       │   │       │   ├── opencl_gl.hpp
│       │   │       │   └── opencl_gl_wrappers.hpp
│       │   │       ├── opencl_clamdblas.hpp
│       │   │       ├── opencl_clamdfft.hpp
│       │   │       ├── opencl_core.hpp
│       │   │       ├── opencl_core_wrappers.hpp
│       │   │       ├── opencl_gl.hpp
│       │   │       ├── opencl_gl_wrappers.hpp
│       │   │       ├── opencl_svm_20.hpp
│       │   │       ├── opencl_svm_definitions.hpp
│       │   │       └── opencl_svm_hsa_extension.hpp
│       │   ├── opengl.hpp
│       │   ├── operations.hpp
│       │   ├── optim.hpp
│       │   ├── ovx.hpp
│       │   ├── persistence.hpp
│       │   ├── ptr.inl.hpp
│       │   ├── saturate.hpp
│       │   ├── simd_intrinsics.hpp
│       │   ├── softfloat.hpp





    
│       │   ├── sse_utils.hpp
│       │   ├── traits.hpp
│       │   ├── types_c.h
│       │   ├── types.hpp
│       │   ├── utility.hpp
│       │   ├── utils
│       │   │   ├── allocator_stats.hpp
│       │   │   ├── allocator_stats.impl.hpp
│       │   │   ├── filesystem.hpp
│       │   │   ├── instrumentation.hpp
│       │   │   ├── logger.defines.hpp
│       │   │   ├── logger.hpp
│       │   │   ├── tls.hpp
│       │   │   └── trace.hpp
│       │   ├── va_intel.hpp
│       │   ├── version.hpp
│       │   ├── vsx_utils.hpp
│       │   └── wimage.hpp
│       ├── core.hpp
│       ├── cvconfig.h
│       ├── dnn
│       │   ├── all_layers.hpp
│       │   ├── dict.hpp
│       │   ├── dnn.hpp
│       │   ├── dnn.inl.hpp
│       │   ├── layer.details.hpp
│       │   ├── layer.hpp
│       │   ├── shape_utils.hpp
│       │   └── utils
│       │       └── inference_engine.hpp





    
│       ├── dnn.hpp
│       ├── features2d
│       │   ├── features2d.hpp
│       │   └── hal
│       │       └── interface.h
│       ├── features2d.hpp
│       ├── flann
│       │   ├── all_indices.h
│       │   ├── allocator.h
│       │   ├── any.h
│       │   ├── autotuned_index.h
│       │   ├── composite_index.h
│       │   ├── config.h
│       │   ├── defines.h
│       │   ├── dist.h
│       │   ├── dummy.h
│       │   ├── dynamic_bitset.h
│       │   ├── flann_base.hpp
│       │   ├── flann.hpp
│       │   ├── general.h
│       │   ├── ground_truth.h
│       │   ├── hdf5.h
│       │   ├── heap.h
│       │   ├── hierarchical_clustering_index.h
│       │   ├── index_testing.h
│       │   ├── kdtree_index.h
│       │   ├── kdtree_single_index.h
│       │   ├── kmeans_index.h
│       │   ├── linear_index.h
│       │   ├── logger.h





    
│       │   ├── lsh_index.h
│       │   ├── lsh_table.h
│       │   ├── matrix.h
│       │   ├── miniflann.hpp
│       │   ├── nn_index.h
│       │   ├── object_factory.h
│       │   ├── params.h
│       │   ├── random.h
│       │   ├── result_set.h
│       │   ├── sampling.h
│       │   ├── saving.h
│       │   ├── simplex_downhill.h
│       │   └── timer.h
│       ├── flann.hpp
│       ├── highgui
│       │   ├── highgui_c.h
│       │   └── highgui.hpp
│       ├── highgui.hpp
│       ├── imgcodecs
│       │   ├── imgcodecs_c.h
│       │   ├── imgcodecs.hpp
│       │   └── ios.h
│       ├── imgcodecs.hpp
│       ├── imgproc
│       │   ├── detail
│       │   │   └── distortion_model.hpp
│       │   ├── hal
│       │   │   ├── hal.hpp
│       │   │   └── interface.h
│       │   ├── imgproc_c.h
│       │   ├── imgproc.hpp
│       │   └── types_c.h
│       ├── imgproc.hpp
│       ├── ml
│       │   ├── ml.hpp
│       │   └── ml.inl.hpp
│       ├── ml.hpp
│       ├── objdetect
│       │   ├── detection_based_tracker.hpp
│       │   ├── objdetect_c.h
│       │   └── objdetect.hpp
│       ├── objdetect.hpp
│       ├── opencv.hpp
│       ├── opencv_modules.hpp
│       ├── photo
│       │   ├── cuda.hpp
│       │   ├── photo_c.h