编译基于armV8架构的opencv,并在rock3a开发板上运行

news2024/11/26 2:26:57

近期在基于arm开发板做图像识别任务开发时,需要用到Opencv库

之前在做rknpu开发时,开发sdk里面已经集成了opencv 但是该opencv开发包不能实现imshow/VideoCapture等函数,经过调研,决定对opencv源代码进行编译,生成armv8架构可以使用的开发包

第一部 下载opencv:

opencv的下载路径为  https://opencv.org/releases/

 

这里下载3.x版本的  至于为什么用这个版本,我不得而知,因为之前用的就是3.x版本。目标我也不知道4.x版本和3.x版本之间的区别是什么。

第二步 就是下载armv8平台上的gcc和g++编译器

这里的aarch64 对应的就是avmv8的64位版本

 第三步  进入opencv源代码路径下,编译安装opencv源码

键入命令 mkdir  mybuild 新建一个文件夹 用来保存编译的文件

键入命令 mkdir  cv_sdk  用来保存编译后生成的库文件  头文件等文件

 第四步 安装cmake cmake-gui等c++编译环境  这里我已经安装完成 故不进行截图了

第五步 采用cmake-gui 搭建编译选项

点击next

 

这里需要选择第一个选项 也就是aarch64开头的cmake 文件,然后点击finish 

设置这两个值 分辨是cmake_build_type 和 cmake_install_prefix 

 

 选中with_gtk_2_x 去掉选中with_gtk

再次点击Configure 和 Generate 关闭cmake-gui 

第六步  键入命令sudo make -j4 && make install  

等待编译安装完成 

完成后就会得到 如下图所示的文件夹 bin是可执行文件夹 include是头文件夹  lib是库文件夹 share是cmake文件夹 

到此为止  arm版的opencv已经编译完成

接下来 我们采用cmake 和 已经编译好的 Opencv 写一个简单的图像处理程序 

这个程序有一个亮点 : 一个是将编译好的动态库文件和头文件  直接拷贝到当前文件目录下,这样的话就方便产品灵活部署,即在其他设备上 不用安装编译Opencv

下图为整个程序的架构

 

接下来看看CMakeLists.txt文件内容

cmake_minimum_required(VERSION 3.1)
project(opencv)
include_directories(/home/rock/opencv_test1/cv_sdk/include)
link_directories(/home/rock/opencv_test1/cv_sdk/lib)
add_executable(opencv opencv.cpp)
target_link_libraries(opencv /home/rock/opencv_test1/cv_sdk/lib/libopencv_highgui.so.3.4.5                            /home/rock/opencv_test1/cv_sdk/lib/libopencv_imgcodecs.so.3.4.5                             /home/rock/opencv_test1/cv_sdk/lib/libopencv_imgproc.so.3.4.5
/home/rock/opencv_test1/cv_sdk/lib/libopencv_video.so.3.4.5
/home/rock/opencv_test1/cv_sdk/lib/libopencv_core.so.3.4.5
/home/rock/opencv_test1/cv_sdk/lib/libopencv_videoio.so.3.4.5

        )

 接下来看看源文件

#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"


int main()
{
    cv::VideoCapture cap;
    cv::Mat srcImage = cv::imread("1.jpg");
    cv::Mat img;
    cv::cvtColor(srcImage, img, cv::COLOR_BGR2RGB);
    //cv::imwrite("resize_input.jpg", srcImage);
    cv::imwrite("resize_input.jpg", img);
    //cv::Mat img;
    cv::cvtColor(srcImage, img, cv::COLOR_BGR2RGB);
    cv::imshow("源图像",srcImage);
    cv::waitKey(0);
    return 0;
}

在build文件夹下进行编译 

,得到可执行文件 

说明opencv的编译是成功的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安科瑞能耗监测系统在新疆昌吉市政务中心项目的研究与应用

安科瑞 华楠摘要&#xff1a;大型公共建筑总面积不足城镇建筑总面积的4%&#xff0c;但总能耗却占全国城镇总耗电量的22%&#xff0c;大型公共建筑单位面积年耗电量达到70&#xff5e;300KWh&#xff0c;为普通居民住宅的10&#xff5e;20倍。公共建筑是节能大户和节能核心&…

Delphi 11.2 安装 CnWizards 组件包

官方网址&#xff1a;https://www.cnpack.org/showdetail.php?id900&langzh-cn 开源免费的组件包&#xff0c;大大提高了开发效率&#xff0c;再次感谢大佬们的无私奉献 这个组件包主要是为了实现一些delphi没有的便捷设置&#xff0c;以及能给delphi增加了一些好用的辅助…

惊艳的产品背后,是锐利的设计思维

缘起 几年前&#xff0c;我偶然用一个 叫 Zine 的小app 写了两篇文章&#xff0c;感觉非常好。 后来在网上认识 了Zine 团队的创始人 Louis&#xff0c;也喜欢上了他们的另一个 App&#xff1a;Varlens&#xff0c; 最近他们推出了记笔记的 App Lattics&#xff0c;一些功能也…

《 Unity Shader 入门精要》 第3章 Unity Shader 基础

第3章 Unity Shader 基础 3.1 Unity Shader 概述 材质与 Unity Shader 在 Unity 中我们通常需要将材质&#xff08;Material&#xff09; 和 Unity Shader 配合使用&#xff0c;常见流程如下&#xff1a; 创建一个材质创建一个 Unity Shader&#xff0c; 并将它赋给材质将材…

Android View类

布局定义了应用中的界面结构&#xff08;例如 Activity 的界面结构&#xff09;。布局中的所有元素均使用 View 和 ViewGroup 对象的层次结构进行构建。View 通常用于绘制用户可看到并与之交互的内容。ViewGroup 则是不可见的容器&#xff0c;用于定义 View 和其他 ViewGroup 对…

AppScan自定义扫描策略,扫描针对性漏洞

系列文章 AppScan介绍和安装 AppScan 扫描web应用程序 AppScan被动手动探索扫描 AppScan绕过登录验证码深入扫描 第五节-AppScan自定义扫描策略&#xff0c;扫描针对性漏洞 AppScan安全扫描往往速度是很慢的&#xff0c;有些场景下他的扫描项目又不是我们需要的&#xff0c;…

如何实现六轴机械臂的逆解计算?

1. 机械臂运动学介绍 机械臂运动学 机器人运动学就是根据末端执行器与所选参考坐标系之间的几何关系&#xff0c;确定末端执行器的空间位置和姿态与各关节变量之间的数学关系。包括正运动学&#xff08;Forward Kinematics&#xff09;和逆运动学&#xff08;Inverse Kinemati…

渔业养殖远程监控系统解决方案

传统的水产养殖依靠养殖者的经验进行观察&#xff0c;信息不准确&#xff0c;调控不及时&#xff0c;养殖规模扩大难&#xff0c;人工成本高。除此之外传统水产养殖以个户居多&#xff0c;生产管理方式粗放&#xff0c;个体生产能力不足&#xff0c;养殖产品的品质难以保障。 …

AppScan扫描报告

系列文章 AppScan介绍和安装 AppScan 扫描web应用程序 AppScan被动手动探索扫描 AppScan绕过登录验证码深入扫描 AppScan自定义扫描策略&#xff0c;扫描针对性漏洞 第六节-AppScan扫描报告 1.加载扫描结果 1.点击【打开】 2.选择之前保存过的扫描结果 3.等待加载完成 …

RK35XX(3568) Android WSL ubuntu22.04 编译环境配置

前言&#xff1a;装Ubuntu真机操作是很流畅但是没什么软件&#xff0c;装Vmware虚拟机操作卡顿配置也麻烦。那不如试一试wsl吧&#xff0c;命令行操作&#xff0c;流程又快捷wsl简介&#xff1a;适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大…

JAVA面试(如何进行有效面试)

1、什么是面试它是一种面试人与求职者之间相互交流信息的有目的的会谈。它使招聘方和受聘方都能得到充分的信息&#xff0c;以在招聘中作出正确的决定。面试是一个双方彼此考量和认知的过程。2、面试的目标从求职者那里获取与个人行为、工作有关的信息&#xff0c;以确定求职者…

c语言数组复习

1、一维数组 ----------&#xff08;1&#xff09;、键盘输入 10 个数&#xff0c;求最大值和最小值&#xff08;最简单的方法&#xff09; ----------&#xff08;2&#xff09;、数组的逆置 #include<stdio.h> void test01() {int arr[10] { 0 };int n sizeof(arr)…

【IoT】硬件选型:如何正确区分电子线的端子型号?

问题提出 笔者最近负责的一款重力传感器由于没有端子&#xff0c;需要在生产时自己压端子&#xff0c;这个时候就会涉及端子的选择。 端子介绍 一般来说&#xff0c;端子有多种不同的型号&#xff0c;在使用的时候&#xff0c;你必须要注意到每种型号之间的差别。 端子一般有XH…

权限管理---尚硅谷

1.项目基础 2.定义统一返回结果对象 3.Nodejs 4.前端内容编写 5.菜单详情 6.SpringSecurity权限管理 7.添加登录日志 8.操作日志 9.后端打包 10.前端打包 11.动态sql日期的判断 项目基础 定义统一返回结果对象定义全局统一返回结果类 import lombok.Data;/*** 全局统一返回结果…

小程序容器技术助力突破智能汽车瓶颈

作为一种综合系统&#xff0c;智能车辆集环境感知、规划决策、多等级辅助驾驶等功能于一体。近年来&#xff0c;智能车辆已经成为世界车辆工程领域研究的热点和汽车工业增长的新动力&#xff0c;很多发达国家都将其纳入到各自重点发展的智能交通系统当中。在共享经济兴起和汽车…

如何写好JS

本节课从实践维度解读在实际编码过程中何种类型的 JavaScript 代码称之为“好代码”&#xff0c;并从 JS 出发&#xff0c;总结其他语言编码可遵循的共性原则&#xff0c;由浅入深&#xff0c;其三大原则是&#xff1a; 各司其职——html&#xff0c;css&#xff0c;js分离组件…

通达信接口QQ是什么端口?

可以将通达信接口QQ视为使用通达信市场软件作为数据库&#xff0c;然后将信息整合为策略的前提&#xff0c;所有行为都是自动化的。通达信接口的优势在于交易策略是事先制定的。是否基于市场波动&#xff0c;不受个人情绪的影响&#xff0c;可以大大降低个人原因造成的错误。 …

[ACTF2020 新生赛]BackupFile

目录 信息收集 思路 构造payload 知识补充 信息收集 从题目来看应该是让扫描备份文件(backupfile) 进入页面就一句话 Try to find out source file! 先用dirbuster模糊扫描一下目录 常见的如下 index.phps index.php.swp index.php.swo index.php.php~ index.php.bak ind…

有哪些数据恢复软件?13个好用的数据恢复工具分享

个人编辑开发了此资源&#xff0c;以帮助购买者寻找最好的免费数据恢复软件来满足其组织的需求。选择合适的供应商和工具可能是一个复杂的过程&#xff0c;需要深入研究&#xff0c;而且往往不仅仅取决于工具及其技术能力。为了让您的搜索更轻松一些&#xff0c;我们在一个地方…

【C++】stack和queue的使用

文章目录Stackstack容器的定义方式:接口函数queuequeue容器的定义方式接口函数栈OJ题目最小栈栈的压入,弹出序列逆波兰表达式求值(后缀表达式)中缀表达式->后缀表达式用两个栈实现队列队列OJ题用队列实现栈使用两个队列实现栈使用一个队列实现栈二叉树的层序遍历I二叉树的层…