海思hi3519av100上移植opencv3.4.1及移植成功验证

2024-01-02 09:59

本文主要是介绍海思hi3519av100上移植opencv3.4.1及移植成功验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 准备工作

2 设置 cmake

3 编译

4 移植

5 验证是否成功

 

一.准备工作

1、首先更新 apt-get,在安装前最好先更新一下系统,不然有可能会安装失败。在终端输入:(如果可以直接安装的话,不用这一步)

sudo apt-get updatesudo apt-get upgrade

2、接着安装官方给的opencv依赖包,在终端输入:(如果没出错,可以省略)

sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

\\然后下载OpenCV3.4.1和OpenCV_contrib-3.4.1,下载需要等待一段时间

https://github.com/Itseez/opencv/archive/3.2.0.zip

https://github.com/opencv/opencv_contrib/archive/3.2.0.zip

3、接下来,在 ubuntu 上安装 cmake-gui

sudo apt-get install cmake-gui

 

二.设置cmake

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

  • 解压 opencv 压缩包

  • 使交叉编译工具链生效

    source /etc/profile

    export LC_ALL=C

  • 命令行下输入:

    cmake-gui

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

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

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

点击 Finish 会 Configure 一直到成功

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

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

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

勾选 BUILD_opencv_world

点击 Generate,等待完成

此时可以关闭 cmake-gui 界面

三.编译

  • 进入之前解压的 opencv 源代码文件目录下

  • 进入目录 cd 3rdparty/protobuf/src/google/protobuf/stubs

  • 修改内容:

    vim common.cc

    在头文件下添加内容:

    #define HAVE_PTHREAD

  • 进入 build_hi3519a 目录下编译

        make -j4

       make install

编译完成后可以在 install 目录下看到 libopencv_world.so 文件

make出现下面错误:

解决:~/opencv-3.4.1/CMakeLists.txt,在514行增加以上代码: ocv_include_directories(./3rdparty/zlib/)

四.移植

  • 将生成的 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;
}
  • 拷贝必要的头文件目录
cp -rf /home/xiongkun/hisi3519/opencv/buid_hi3519a/install/include/ /opt/hisi-linux/x86-arm/arm-himix200-linux/include
  • 交叉编译命令
arm-himix200-linux-g++ -Wno-psabi -I /home/xiongkun/hisi3519/opencv/buid_hi3519a/install/include/ -L /home/xiongkun/hisi3519/opencv/buid_hi3519a/install/lib/ -lopencv_world -lpthread -lrt -ldl -o demo demo.cpp

开发板验证:

  • 复制精简后的libopencv_world.so 到开发板的 /lib 目录下
  • 将可执行文件 demo 复制到开发板,执行生成 demo.jpg 文件
  • 复制 demo.jpg 到虚拟机查看(如下图)

 

最后带上自己移植好的库,自行下载

libopencv_world.so

这篇关于海思hi3519av100上移植opencv3.4.1及移植成功验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/562113

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

easyui 验证下拉菜单select

validatebox.js中添加以下方法: selectRequired: {validator: function (value) {if (value == "" || value.indexOf('请选择') >= 0 || value.indexOf('全部') >= 0) {return false;}else {return true;}},message: '该下拉框为必选项'}

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

React 笔记 父子组件传值 | 父组件调用子组件数据 | defaultProps | propsType合法性验证

1.通过props实现父组件像子组件传值 、方法、甚至整个父组件 传递整个父组件则   [变量名]={this} import Header from "./Header"render(){return(<Header msg={"我是props传递的数据"}/>)} import React,{Component} from "react";class Header extends

Java验证辛钦大数定理

本实验通过程序模拟采集大量的样本数据来验证辛钦大数定理。   实验环境: 本实验采用Java语言编程,开发环境为Eclipse,图像生成使用JFreeChart类。   一,验证辛钦大数定理 由辛钦大数定理描述为: 辛钦大数定理(弱大数定理)  设随机变量序列 X1, X2, … 相互独立,服从同一分布,具有数学期望E(Xi) = μ, i = 1, 2, …, 则对于任意正数ε ,

RT-Thread(Nano版本)的快速移植(基于NUCLEO-F446RE)

目录 概述 1 RT-Thread 1.1 RT-Thread的版本  1.2 认识Nano版本 2 STM32F446U上移植RT-Thread  2.1 STM32Cube创建工程 2.2 移植RT-Thread 2.2.1 安装RT-Thread Packet  2.2.2 加载RT-Thread 2.2.3 匹配相关接口 2.2.3.1 初次编译代码  2.2.3.