opencv4.5.2嵌入式移植

近期分别在海思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时必须使用绝对路径而不能使用相对路径)如下图:

opencv源码路径配置

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

选择编译器

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

请添加图片描述

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

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

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
OpenCV是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉算法。下面是使用OpenCV 4.5.2的步骤: 1. 下载OpenCV 4.5.2:你可以从OpenCV的官方GitHub页面下载OpenCV 4.5.2的源代码或者预编译的二进制文件。根据你的需求选择合适的版本进行下载。 2. 安装Visual Studio 2019:OpenCV需要使用C++编译器进行编译,因此你需要安装Visual Studio 2019作为开发环境。 3. 下载OpenCV扩展模块:如果你需要使用OpenCV的扩展功能,你可以从OpenCV的官方GitHub页面下载对应版本的扩展模块。 4. 下载CMake:CMake是一个跨平台的构建工具,你需要下载并安装CMake来配置和生成OpenCV的项目文件。 5. 解压OpenCV、扩展模块和CMake:将下载的OpenCV、扩展模块和CMake解压到指定的目录,例如D:\opencv4.5.2、D:\opencv_contrib-4.5.2和D:\cmake3.21。 6. 使用CMake进行编译:打开CMake GUI,设置源代码路径为OpenCV的根目录(例如D:\opencv4.5.2),设置构建路径为一个新的目录(例如D:\opencv4.5.2_build),点击Configure按钮,选择Visual Studio 2019作为生成器,点击Generate按钮生成Visual Studio的项目文件。 7. 打开生成的Visual Studio项目文件:在构建路径中找到生成的Visual Studio项目文件(例如D:\opencv4.5.2_build\OpenCV.sln),双击打开。 8. 编译OpenCV:在Visual Studio中,选择Release或Debug配置,点击生成按钮开始编译OpenCV。 9. 完成编译:编译完成后,你可以在构建路径中找到生成的OpenCV库文件和可执行文件。 10. 使用OpenCV:现在你可以在你的项目中使用OpenCV库进行图像处理和计算机视觉任务了。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值