最近新换了工作,工作中一项任务是将OpenCV移植到Hi3516A平台上。这项工作涉及到很多步骤,中间可以说经历了千难万险,克服了种种艰难困苦,最终成功了!现将过程详细写出,一方面作为此段工作的总结和回顾,另一方面也使后来者能不必再经历我所经历的困难乃至苦难。

言归正传。这个任务需要很多步骤,下边一步一步详细说明。在详述之前先将笔者的开发环境列出:Win10系统上虚拟机Ubuntu14.04。

第零步:准备Hi3516A环境。

关于这一步内容,请参考海思3516A SDK相关文档及网上相关说明,在此不详述。

第一步:下载OpenCV源码。

登录https://opencv.org/releases/,选择相应的版本进行下载。笔者下载的版本是Open CV - 3.4.1。

第二步:编译前的准备工作。

1. 如果是git clone下载的,直接进入到OpenCV源码根目录;如果下载的是zip文件,则需要先运行unzip opencv-3.4.1.zip命令解压,之后再进入到源码根目录;

2. 建立build文件夹和output文件夹,命令如下:

$mkdir build

$mkdir output

3. 进入build文件夹,命令如下:

$cd build

第三步:编译

关键性的步骤来了!在这里,我把一些开始出错的步骤也列出来,供遇到同样问题的人参考。

1. 运行以下命令(这一步参考了https://blog.csdn.net/zhenglie110/article/details/83009675步骤三中内容):

$cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=../output -D CMAKE_C_COMPILER=arm-hisiv300-linux-gcc -D CMAKE_CXX_COMPILER=arm-hisiv300-linux-g++ -D BUILD_SHARED_LIBS=OFF  ../

2. 运行步骤1的过程中可能会卡一会,下载相关内容,如下图所示:

3. CMake完成后,执行make命令。

$make

4. 出现以下错误,如下图所示:

提示找不到zlib.h。

5. 参考网上解决方法,运行以下命令:

sudo apt-get install zlib1g-dev

结果问题依旧。

6. 依然参考https://blog.csdn.net/zhenglie110/article/details/83009675中步骤四的内容,修改源码根目录的CMakeLists.txt,在514行ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})的下边添加一行内容:

ocv_include_directories(./3rdparty/zlib/)

之后再次重复步骤1-3。上面所引用的参考文章中说,到这一步,他就可以正确编译通过,并最终生成相应文件了。但是在我的环境下还是不行!虽然步骤4中找不到zlib.h的问题解决了,但是引入了新的更为棘手的问题!如下图所示:

提示:

/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnuabi/include/c++/4.8.3/arm-hisiv300-linux-uclibcabi/bits/ctypes_base.h:46:19:error: '__ctype_touplow_t' does not name a type

typedef const __ctype_touplow_t* __to_type;

/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnuabi/include/c++/4.8.3/arm-hisiv300-linux-uclibcabi/bits/ctypes_base.h:46:19:error: '__ctype_mask_t' does not name a type

typedef const __ctype_mask_t* mask;

......

在网上查找这个问题的解决方法,可就众说纷纭了。有的说是头文件被重复包含导致的;有的说是uclibc不支持ctype导致的;还有的说删了build文件夹,从头再来一遍就解决了的;最气人的有一个帖子,说最后改了几个宏定义解决了,但是就不把具体怎么改的写出来......

没有一个方法有效……

一时间似乎卡住了,不能前行,也不能后退。世界似乎开始变得迷茫......

有病乱投医似的尝试了各种方法,比如下载cmake3-qt-gui,之后通过cmake-gui界面配置;比如差点要修改ctypes.h等......

直到又进行了一种方法尝试后,一丝曙光出现了!在这里要特别提一下,也要特别感谢一下。

https://blog.csdn.net/zhenglie110/article/details/87933483,这个博客(和上面引用的博客应该是一个作者)中提到,修改cmake的配置,也就是扩充了步骤1中的命令:

$cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=../output -D CMAKE_C_COMPILER=arm-hisiv300-linux-gcc -D CMAKE_CXX_COMPILER=arm-hisiv300-linux-g++ -D BUILD_SHARED_LIBS=OFF -D BUILD_ZLIB=ON -D ZLIB_INCLUDE_DIR=../3rdparty/zlib ../

上边红色的部分是关键性的改变。这一次cmake之后,再make时就不再提示上边的错误了,可以正确编译通过!!!

7. 攻克了这一难题后,下边就一马平川了。

$make install

8. 最终在{OpenCV 源码根目录}/output下生成了以下内容:

~/opencv/opencv-3.4.1/output$ ls
    bin  include  lib  share

~/opencv/opencv-3.4.1/output$ ls lib/
libopencv_calib3d.a     libopencv_features2d.a  libopencv_imgcodecs.a   libopencv_objdetect.a   libopencv_stitching.a   libopencv_videoio.a     
libopencv_core.a        libopencv_flann.a       libopencv_imgproc.a     libopencv_photo.a       libopencv_superres.a    libopencv_videostab.a   
libopencv_dnn.a         libopencv_highgui.a     libopencv_ml.a          libopencv_shape.a       libopencv_video.a       pkgconfig/              
    ~/opencv/opencv-3.4.1/output$ ls include/
opencv/  opencv2/

至此,OpenCV在Hi3516A的移植任务圆满结束。

海思Hi3516A上移植OpenCV相关推荐

  1. 海思3519上移植Qt5.5.1

    1. 源码下载 网址:http://download.qt.io/archive/qt/5.5/5.5.1/single/ 源码包: qt-everywhere-opensource-src-5.5. ...

  2. 如何在海思 Hi3519AV100上移植YOLOV3 (3)

    隔了好久来填坑,这次写一下怎么在板卡中部署模型. 打个小广告: 海思hi3519av100开发板链接: https://item.taobao.com/item.htm?spm=a230r.1.14. ...

  3. 海思3559A上编译OpenCV4.1.0源码操作步骤

    1. 从https://github.com/opencv/opencv/releases 下载opencv源码opencv-4.1.0.zip并解压缩: 2. 修改最顶层的CMakeLists.tx ...

  4. 海思Hi3559A平台移植 opencv4.0.0

    原文:https://blog.csdn.net/xclshwd/article/details/85257117 海思Hi3559A平台移植 opencv4.0.0 2018年12月26日 09:5 ...

  5. 从零开始在海思芯片上部署uboot、kernel、rootfs、mpp

    前言 本文介绍的是拿到海思芯片的开发板和海思的SDK开发包,在裸机上部署uboot.kernel.rootfs.mpp的过程,其中不涉及uboot.kernel.rootfs.mpp的细节,主要是介绍 ...

  6. 海思篇之基于openCV的png图片拼接

    一.拼接原理 我们在现实中要把两张图片或横或竖地排列在一起,则首先要有一个平整的桌面或者一块平整的面板,这在编程中也一样的,而这个平整的面就是图层,或者可以理解为一张更大的矩形图片,这个矩形图片大到可 ...

  7. 海思3559A上编译Valgrind源码操作步骤

    注:按照以下步骤可以在海思板子上正常编译valgrind源码并生成valgrind可执行文件,但可能还不能在海思板子上正常使用. 1. 从http://valgrind.org/downloads/? ...

  8. 海思3559A上编译GDB源码操作步骤及简单使用

    1. 从http://ftp.gnu.org/gnu/gdb/ 下载最新稳定版8.3,即gdb-8.3.tar.gz,解压缩: 2. 在gdb-8.3目录下,创建一个build.sh脚本文件,内容如下 ...

  9. 海思3559A上编译LIVE555源码操作步骤

    1. 从http://www.live555.com/liveMedia/public/ 下载live.2019.06.28.tar.gz,并解压缩: 2. 生成静态库,拷贝一份config.arml ...

最新文章

  1. 城市大脑全球标准研究2:如何理解和定义城市大脑?
  2. 【转】测试思考——测试人员需要具备哪些素质?
  3. 【深入Java虚拟机JVM 06】垃圾收集概述
  4. mybatis增删改查快速实现!!!
  5. [MySQL FAQ]系列 -- 快速还原MyISAM表索引
  6. Shell编程入门(第二版)(中)
  7. 【POJ - 2533】Longest Ordered Subsequence(四种方法解决最长上升子序列 含二分优化版本)
  8. Mac 上开启一个简单的服务器
  9. 入门 | egg.js 入门之egg-jwt
  10. Linq to xml修改CDATA节点值
  11. ELK之ES-Logstash-Kibana互联
  12. deeplearning.ai——构建一个LR分类器来识别猫
  13. python归一化函数_机器学习-归一化方法
  14. 基于浏览器的m3u8和flv的播放器
  15. 每月一书(202202): 《从零开始做自媒体》
  16. springboot集成graphql(一)
  17. MySQL整理-基础知识篇1
  18. Java如何判断一个上传文件的内容类型
  19. python实现守护进程_Python如何实现守护进程的方法示例
  20. 2022团队天梯赛答案解析

热门文章

  1. (87)--Python数据分析:指数密度函数与指数分布图
  2. RPA在人力资源上的应用
  3. MySQL 5.7.17 Group Relication(组复制)搭建手册【转】
  4. 紫林U盘解锁精灵V1.0.1
  5. 骑驴找马被察觉怎么办?
  6. 404计算机考研,404分考研过来人谈高分心得和经验
  7. 12个资源丰富的无损音乐下载网站
  8. FlipView 索引为0 WP8.1
  9. UEFI+GPT模式下安装win 10系统——生命不止,折腾不息
  10. JAVA(计算机编程语言)