1 准备工作

2 设置 cmake

  • 创建文件夹 build_hi3519a,在该文件夹下创建文件夹 install

  • 解压 opencv 压缩包

  • 使交叉编译工具链生效
    source /etc/profile
    export LC_ALL=C

  • 命令行下输入:
    cmake-gui

  • 填写你的 opencv 解压目录和刚刚创建的 build_hi3519a 目录地址
    1

  • 选择 Configure,之后选择第四个选项,点击 Next
    2

  • 设置如下,其中 C 和 C++ 内填交叉编译工具链地址,Target Root 先不填
    3

  • 点击 Finish 会 Configure 一直到成功
    4

  • 选择CMAKE_INSTALL_PREFIX。 install 是刚刚创建的,后面的 make install 会把编译好的opencv libs拷贝到该目录下
    5

  • 给 CMAKE_EXE_LINKER_FLAGS 加上参数 -lpthread -lrt -ldl
    6

  • 设置 CMAKE_FIND_ROOT_PATH 为交叉编译工具链的 bin 目录
    7

  • 勾选 BUILD_opencv_world
    8

  • 点击 Generate,等待完成
    9

  • 此时可以关闭 cmake-gui 界面

3 编译

  • 进入之前解压的 opencv 源代码文件目录下
  • 进入目录 cd 3rdparty/protobuf/src/google/protobuf/stubs
  • 修改内容:
    vim common.cc
    在头文件下添加内容:
    #define HAVE_PTHREAD
  • 进入 build_hi3519a 目录下编译
    make -j4
    make install
  • 编译完成后可以在 install 目录下看到 libopencv_world.so 文件
    000

4 移植

  • 将生成的 libopencv_world.so 文件拷贝到 /opt/hisi-linux/x86-arm/arm-himix200-linux/lib 目录下
  • 精简 so 文件
    arm-himix200-linux-strip libopencv_world.so
    使用 ls -lh 可以看出现在 libopencv_world.so 已经明显变小
  • 复制精简后的libopencv_world.so 到开发板的 /lib 目录下
  • 最后检验是否成功
    创建 demo.cpp 文件
#include <iostream>
#include <stdio.h>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>

using namespace cv;
using namespace std;

int main()
{		
	Mat image(200, 150, CV_8UC1);
		
	for (int i = 0; i < image.rows; i++)	
	{
		uchar* p = image.ptr<uchar>(i);
		for (int j = 0; j < image.cols; j++)
		{
			if (i < 80 && i>50)     
			{
				p[j] = 0;
			}
			else
			{
				p[j] = 255;
			}
		}
	}

	imwrite("demo.jpg", image);
		
	return 0;
}

  • 交叉编译命令
    arm-himix200-linux-g++ -Wno-psabi -I /home/build_hi3519a/install/include/opencv4/ -L /home/build_hi3519a/install/lib/ -lopencv_world -lpthread -lrt -ldl -o demo demo.cpp
  • 将可执行文件 demo 复制到开发板,执行生成 demo.jpg 文件
  • 复制 demo.jpg 到虚拟机查看
    33

5 编译静态库

勾选 BUILD_opencv_world 之后再取消勾选 BUILD_share的有关选项。

经过实验opencv4.0.1 opencv3.4.11对arm64位支持不是很好。opencv4.0.1可以编译出静态库,但是链接的时候会报错。opencv3.4.11直接就无法编译出来。

最后选择使用opencv3.4.3版本
链接的时候,命令变为
libopencv_world.a libIlmImf.a liblibjasper.a liblibjpeg-turbo.a liblibpng.a liblibtiff.a liblibwebp.a libzlib.a -lpthread -lrt -ldl -lm
其他的静态库在 ./share/3rd…/lib 目录下

6 下载

3519-opencv4.0.1版本编译的libopencv_world.so文件

3559-opencv4.0.1版本编译的libopencv_world.so文件

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐