近期分别在海思3559AV100平台和君正T40平台移植opencv4.5.2,遇到了不少问题,尤其是T40平台使用mips架构,交叉编译器为mips-linux-uclibc-gnu遇到了一些问题,现将全过程整理记录如下:

一、下载opencv

前往opencv下载地址和opencv_contrib下载地址下载opencv源码,我下载的版本是opencv-4.5.2.zipopencv_contrib-4.5.2.tar.gz

二、编译安装

2.1 编译准备

先安装cmake和cmake-qt-gui

sudo apt-get install cmake -y
sudo apt  install cmake-qt-gui -y

将下载的两个文件解压,然后再这两个文件夹同级目录下分别创建build和install两个文件夹分别用于cmake执行目录和install安装目录;

2.2配置cmake

  1. 进入build文件夹,执行cmake-gui配置源码目录和编译目录(配置cmake时必须使用绝对路径而不能使用相对路径)如下图:

  1. 点击Configure后配置交叉工具链如图显示:

此处填写交叉编译工具的全路径,以防万一,如下图所示:

  1. 点击configure,可能需要多次点击一直到出现Configuring done后完成,然后需修改一些配置项。
  2. 修改OPENCV_EXTRA_MODULES_PATH,也就是contrib路径


5. 修改安装路径CMAKE_INSTALL_PREFIX:

  1. 添加CMAKE_FIND_ROOT_PATH和ZLIB_INCLUDE_DIR

此处截图有误,ZLIB应该为***绝对路径***而不能为相对路径
7. 选中编译opencv_world库

  1. 如果想编译静态库,则不要选择BUILD_SHARED_LIBS,这样make install后生成的就是静态库,如下:

  1. 如果无需编译example和test可以把相关的选项关闭。

  2. 再次点击configure知道没有红色出现,点击Generate等待出现Generating done,关闭CMake-gui;

  3. 修改CMakeCache.txt

CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt -ldl
CMAKE_CXX_FLAGS:STRING=-fpermissive

至此configure完成;

将从网上下载的.i文件拷贝到opencv_contrib-xx/modules/xfeatures2d/src/目录下;

2.3编译安装opencv库

在build文件夹下执行make -j4;中途会可能出现如下错误,解决方案如下:可以先修改后再执行make编译,编译耗时较长,我用虚拟机编译耗时接近两个小时;

2.3.1#error "No suitable threading library available."

修改opencv源码下的3rdparty/protobuf/src/google/protobuf/stubs/common.cc文件,添加\#define HAVE_PTHREAD如下图:

2.3.2 error: operator '&&' has no right operand #if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64

修改你的编译器features.h,如我的/opt/hisi-linux/x86-arm/aarch64-himix100-linux/target/usr/include/features.h

在#if defined前面 加上#define _FILE_OFFSET_BITS 64

2.3.3 grfmt_jpeg.cpp:504:60: error: invalid conversion from 'JSAMPROW {aka char*}' to 'const uchar* {aka const unsigned char*}'

修改build目录下的CMakeCache.txt,添加CMAKE_CXX_FLAGS:STRING=-fpermissive如下图:

2.3.4 undefined reference to `png_init_filter_functions_neon'

修改opencv下的 /3rdparty/libpng/pngpriv.h130行

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

改为

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

2.3.5 base.hpp:548:17: error: 'cbrt' is not a member of 'std' return std::cbrt(val)

此问题在海思上移植时没出现问题,在T40上编译时报错,没找到原因,怀疑跟编译器有关系,将std::cbrt修改成cbrt即可正常编译通过;还有std::copysign也会报错,修改方式类似。

2.3.6 error: no matching function for call to 'find_if_not

std::find_if_not(name.begin(), name.end(), isspace);

改成:

std::find_if_not(name.begin(), name.end(), std::ptr_fun(::isspace));

编译完成后执行make install就会在指定的安装路径下安装bin include lib LICENSE share四个文件夹,自此交叉编译安装完成;

三、相关资源下载:

链接:https://pan.baidu.com/s/15-mKThIjD_N8Gg5ZMN7_-A
提取码:1234

opencv4.5.2嵌入式移植相关推荐

  1. 嵌入式linux使用opencv,OpenCV嵌入式移植后XML读取问题及解决

    1.OpenCV在进行嵌入式移植后需要读取XML文件. 一开始利用最常用程序读取: cv::FileStorage fs(xml_filename, cv::FileStorage::READ); i ...

  2. 嵌入式移植NTP(Network Time Protocol)

    为什么80%的码农都做不了架构师?>>>    ST板子OTT盒子没法通过实时码流获取时间,只能通过网络实时获取时间,这篇文档记录下自己解决的整个过程,网上已经有很多NTP 服务器配 ...

  3. linux嵌入式移植培训,达内嵌入式培训大讲堂之Linux系统移植

    移植一个基本的必要的linux系统(包含存储设备,输入输出设备驱动)移植到板子里,其他的一些驱动不能移植进去,对设备的要求不高,接下来,达内嵌入式培训大讲堂将和大家讨论"Linux系统移植& ...

  4. libsvm嵌入式移植

    SVM(Support Vector Machine, 支持向量机)这个算法也是相当经典的一个分类算法了.如果想要使用SVM算法,大家一般也不会自己造轮子,开源的库也就够用了.开源的SVM库中最香的, ...

  5. mjpg-streamer本机安装与嵌入式移植

    mjpg-streamer简介 mjpg‐streamer是一个开源软件.MJPG streamer从Linux UVC兼容的网络摄像头.文件系统或其他输入插件获取JPG,并通过HTTP.RTSP.U ...

  6. [mqtt]mqtt嵌入式移植

    目前在无线这块,很多4G模组的厂商已经将mqtt放入模块内,无需在项目代码中再实现mqtt移植 github eclipse paho source code: https://github.com/ ...

  7. 嵌入式移植使用pppoe

    PPPoE官网:RP-PPPoE | Roaring Penguin 源码下载地址:Dianne Skoll's Personal Web Site - RP-PPPoE - Software Pro ...

  8. 嵌入式Linux工程师的成长经历

    从嵌入式研发行业十年,认为学习就是要不断的吸纳知识,在研发过程中,经常会遇到一些问题,这种发现问题并解决问题的过程就是进步.下面是嵌入式Linux开发工程师的成长过程,希望对大家能有所启发. 1.Li ...

  9. 一文知晓嵌入式Linux

    ​ ​ 嵌入式Linux是什么 嵌入式Linux跟桌面Linux一样,是一个操作系统.从单片机走过来的童鞋往往习惯于直接控制寄存器,事必躬亲,从零开始实现想要的功能.而在嵌入式Linux的世界里,我们 ...

最新文章

  1. 高糊视频秒变4K,速度快了9倍!东南大学提出新的视频超分辨率系统
  2. websocket ws 协议 简介
  3. Oracle入门心得(2)
  4. 使用url连接mysql时的属性_MySQL数据库连接属性配置,即URL后一些配置参数及其重要性...
  5. 计算机系统的分类与发展方向
  6. 浅淡Webservice、WSDL三种服务访问的方式(附案例)
  7. 数字货币交易所源码_(数字货币交易所科普)开发数字货币交易所应该注意哪些问题...
  8. if 判断成绩 ,整百制
  9. mac osx 上Eclipse/CDT问题及解决方案
  10. AVS解码器在DSP平台上的优化
  11. JDK1.8网盘链接
  12. function core.php is missing,PHP代码
  13. oracle杅擂踱阀葩,Oracle常用傻瓜问题1000问
  14. 基于uFUN开发板的RGB调色板
  15. OPTIMIZE TABLE的作用--转载
  16. new和delete运算符
  17. python文本处理的第三方库是什么,python - 实现文本分类[简单使用第三方库完成]...
  18. 3dmax 单位设置 系统单位设置和显示单位比例
  19. 高性能服务器设计——常用网络服务器设计模型
  20. 正则表达式系列之 —— 模式(Patterns)和修饰符(flags)

热门文章

  1. 网站html漂浮代码大全,网页漂浮窗口代码
  2. kali自带浏览器上不了网的解决办法
  3. 使用k-means及k-prototype对混合型数据集进行聚类分析
  4. 高级运维工程师面试题(更新中)
  5. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略
  6. 谷歌浏览器无法使用谷歌翻译解决办法
  7. 单反相机的传奇—佳能单反50年辉煌之路(连载十四)
  8. Java集合类ArrayList线程不安全验证和解决
  9. win10固态硬盘分区 整数_电脑硬盘分区大小多少才合理【详细介绍】
  10. 试验设计方法与Design-Expert软件应用目录