下载

下载指定版本的opencv-4.1.0opencv_contrib-4.1.0的源码
1
2
下载的压缩包拷贝到linux服务器上,解压

安装cmake-gui

sudo apt-get install cmake-gui

运行cmake-gui

选择source code路径和build路径,点击Configure

3

选择交叉编译配置选项

4

配置c和c++的编译器

5

点击finish会进行初步的配置

6

进一步配置

配置build类型

7

配置安装路径

8

将opencv_contrib模块也编译进来

9

保险起见,添加交叉编译器的根目录

10

勾选BUILD_opencv_world

11

再次点击Configure,开始解问题吧 ( :

问题1 缺少boostdesc_bgm.i

cmake尝试下载该文件,但网络问题卡住
12
打开opencv_contrib-4.1.0\modules\xfeatures2d\CMakeLists.txt,注释掉下载的命令
13

该模块也会因此被disable,目前用不到,先关了吧

也可以自行下载对应的文件放到对应的位置,这里先不管了(是福不是祸,是祸躲不过 ( : )

问题2 缺少face_landmark_model.dat

打开opencv_contrib-4.1.0\modules\face\CMakeLists.txt,注释掉下载的命令
14

同样,影响暂时未知

再次点击Configure,Configuring done

点击Generate,Generating done

开始make

cd build_hisi
make -j8

问题1

15

common.cc中增加宏定义#define HAVE_PTHREAD

16

问题2 类型转换错误

17

打开opencv-4.1.0\build_hisi\CMakeCache.txt,添加 -fpermissive 编译选项

18

问题3 缺少boostdesc_bgm.i

19

  • 终究逃不掉,自己下载吧

  • 打开\opencv_contrib-4.1.0\modules\xfeatures2d\cmake\download_boostdesc.cmake,参照里面的下载内容打开url,右键另存为文件。

20

  • 同理打开\opencv_contrib-4.1.0\modules\xfeatures2d\cmake\download_vgg.cmake,下载所需内容
  • 将这些下载的文件拷贝到opencv_contrib-4.1.0\modules\xfeatures2d\src

问题4 undefined reference to “pthread_key_create”

打开opencv-4.1.0\build_hisi\CMakeCache.txtCMAKE_EXE_LINKER_FLAGS添加 -lpthread -lrt -ldl 链接选项

21

问题5

22

打开\opencv-4.1.0\3rdparty\libpng\pngpriv.h,做如下替换

#  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

替换为

#if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

问题6

23

头文件include地址不对,features2d/test/test_detectors_regression.impl.hpp在opencv-4.1.0的opencv-4.1.0/modules/而不是opencv_contrib-4.1.0/modules/

将以下几个文件从opencv-4.1.0\modules\features2d\test目录拷贝到opencv_contrib-4.1.0\modules\xfeatures2d\test目录下

test_descriptors_invariance.impl.hpp
test_descriptors_regression.impl.hpp
test_detectors_invariance.impl.hpp
test_detectors_regression.impl.hpp
test_invariance_utils.hpp

打开\opencv_contrib-4.1.0\modules\xfeatures2d\test\test_features2d.cpp

#include "features2d/test/test_detectors_regression.impl.hpp"
#include "features2d/test/test_descriptors_regression.impl.hpp"

替换为

#include "test_detectors_regression.impl.hpp"
#include "test_descriptors_regression.impl.hpp"

打开\opencv_contrib-4.1.0\modules\xfeatures2d\test\test_rotation_and_scale_invariance.cpp

#include "features2d/test/test_detectors_invariance.impl.hpp" // main OpenCV repo
#include "features2d/test/test_descriptors_invariance.impl.hpp" // main OpenCV repo

替换为

#include "test_detectors_invariance.impl.hpp"
#include "test_descriptors_invariance.impl.hpp"

make install

make install

24

测试库

  • 创建以下文件:

cvtColor.cpp

#include <opencv2/opencv.hpp>
using namespace cv;
int main(void){
Mat img = imread("./dog.jpg");
if (img.empty()){
printf("reading image fails \n");
}
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
imwrite("./dog_gray.png", gray);
printf("cvtColor done\n");
return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
find_package(OpenCV REQUIRED opencv_world)
# SET(OpenCV_LIBS "/home/aaron-wu/opencv/arm-linux-hisi/lib/libopencv_world.so")
# SET(OpenCV_INCLUDE_DIRS "/home/aaron-wu/opencv/arm-linux-hisi/include/opencv4")

# skip rpath
# SET(CMAKE_SKIP_RPATH TRUE)
# SET(CMAKE_SKIP_BUILD_RPATH TRUE)
# SET(CMAKE_SKIP_INSTALL_RPATH TRUE)

# set rpath self
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "/lib")

add_executable(demo cvtColor.cpp)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpthread -lrt -ldl")
message(STATUS ${OpenCV_LIBS})
target_link_libraries(demo PUBLIC ${OpenCV_LIBS})
target_include_directories(demo PUBLIC ${OpenCV_INCLUDE_DIRS})
  • build&make
mkdir build
cd build
touch build.sh
# 编辑build.sh如下
sh build.sh

build.sh

cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=aarch64-himix210-linux-gcc \
-DCMAKE_CXX_COMPILER=aarch64-himix210-linux-g++ \
-DOpenCV_DIR=/home/aaron-wu/opencv/arm-linux-hisi/lib/cmake/opencv4 \
..
make -j4
  • 生成demo拷贝到板子上,同时拷贝libopencv_world.so到板子的/lib目录下
  • 在板子上执行./demo,成功。