Qt for Android 之 OpenCV编译(Windows下编译)

简介

前两天刚好更新了4.10, 这里以4.10作为示例进行编译, Qt版本是Qt6.6.2。

准备OpenCV的Android库

一. 使用官方编译好的库

1. 下载OpenCV android SDK

opencv-4.10.0-android-sdk.zip

2. 解压缩

官方提供的包含了多个架构的opencv android库
在这里插入图片描述

二. 自行编译

注意:
本篇只编译下载的源码, 并没有更新扩展, 有需要的话自行下载并按照如下方式设置编译:
1) 下载最新扩展 opencv_contrib
2) 在cmake-gui中添加值, 如下图
OPENCV_EXTRA_MODULES_PATH-》PATH-》<opencv_contrib>/modules
在这里插入图片描述

1. 下载OpenCV

opencv-4.10.0-windows.exe
下载完毕之后运行, 程序将源码解压缩到本地你自己设定的路径。

2. 编译

参考 官方OpenCV-Android-SDK编译

编译前准备
Qt for Android 编译套件使用的NDK是25.1.x, 所以后面NDK版本选择由此而来
在这里插入图片描述

1)打开终端 cmd.exe
2) 设置将编译器环境添加到环境变量
注: 这样添加只对打开的这个cmd.exe生效
SET PATH=%PATH%;D:\Softwares\Paths\msys64\mingw64\bin
此环境包含mingw32-make.exe, gcc, g++, python3, cmake-gui等编译所需

  1. 设置Android环境变量
    SET OPENCV_SRC_FOLDER=E:\test\opencv\sources
    SET CONTRIB_SRC_FOLDER=E:\test\opencv_contrib-4.x
    SET OPENCV_BUILD_FOLDER=E:\test\opencv\sources\build
    SET ANDROID_SDK=D:\Softwares\Paths\Android\android-sdk
    SET ANDROID_NDK_HOME=D:\Softwares\Paths\Android\android-sdk\ndk\25.1.8937393

  2. 执行编译指令

ndk-25.config.py 此次ndk是25版本, 所以选择这个文件执行 no_samples_build 不需要编译示例
–extra_modules_path %CONTRIB_SRC_FOLDER%/modules # 如果不需要更新扩展模块, 去掉这部分
执行:
D:\Softwares\Paths\msys64\mingw64\bin\python3
%OPENCV_SRC_FOLDER%/platforms/android/build_sdk.py
%OPENCV_BUILD_FOLDER% %OPENCV_SRC_FOLDER% --ndk_path
%ANDROID_NDK_HOME% --sdk_path %ANDROID_SDK% --extra_modules_path
%CONTRIB_SRC_FOLDER%/modules --no_samples_build --config
%OPENCV_SRC_FOLDER%/platforms/android/ndk-25.config.py

  1. 等待编译完毕
    编译画面截图, 编译中的错误解决参考下文“编译中遇到的错误”, 编译之后安装路径如下图所示:
    在这里插入图片描述
    编译后目录支持架构:
    在这里插入图片描述

三. 编译中遇到的错误

  1. gradle-7.5.1 下载失败
    在这里插入图片描述
    解决, 手动下载, 并放到C:\Users\Administrator.gradle\wrapper\dists\gradle-7.5.1-all\1ehga6e77gqps5uk2kc5kf1vc 目录下
    https://services.gradle.org/distributions/gradle-7.5.1-all.zip

提示: ndk-25.config.py文件中有需要的gradle版本,可以提前自己看下环境是否包含

四. 查看编译参数

使用cmake-gui直观的查看官方配置文件生成的编译参数,如下图:
在这里插入图片描述

Qt for Android项目导入OpenCV

Note : .pro或.pri不要写中文备注,容易出现莫名错误
.pro 中添加如下内容

android {# OPENCV_ANDROID=E:/test/opencv/sources/build/OpenCV-android-sdkOPENCV_ANDROID=E:/OpenCV-android-sdk# ANDROID_TARGET_ABIS = armeabi-v7a arm64-v8a x86 x86_64# for(a, ANDROID_TARGET_ABIS) {#     android_add_jni_libs.path = $$PWD/libs/$$a#     android_add_jni_libs.sources = $$a/libopencv_java4.so# }contains(ANDROID_TARGET_ARCH, armeabi-v7a) {isEmpty(OPENCV_ANDROID) {error("Let OPENCV_ANDROID point to the opencv-android-sdk, recommended: v4.0")}INCLUDEPATH += $$OPENCV_ANDROID/sdk/native/jni/include#OPENCV3RDPARTYLIBS = $$OPENCV_ANDROID/sdk/native/3rdparty/libs/armeabi-v7aOPENCVNATIVESTATICLIBS = $$OPENCV_ANDROID/sdk/native/staticlibs/armeabi-v7aOPENCVNATIVELIBS = $$OPENCV_ANDROID/sdk/native/libs/armeabi-v7aOPENCV3RDPARTYLIBS=$$OPENCV_ANDROID/sdk/native/3rdparty/libs/armeabi-v7aandroid_add_jni_libs.path = $$OPENCVNATIVELIBSandroid_add_jni_libs.sources = $$OPENCVNATIVELIBS/libopencv_java4.soLIBS += \$$OPENCVNATIVESTATICLIBS/libopencv_features2d.a \$$OPENCVNATIVESTATICLIBS/libopencv_flann.a \$$OPENCVNATIVESTATICLIBS/libopencv_gapi.a \$$OPENCVNATIVESTATICLIBS/libopencv_highgui.a \$$OPENCVNATIVESTATICLIBS/libopencv_imgcodecs.a \$$OPENCVNATIVESTATICLIBS/libopencv_imgproc.a \$$OPENCVNATIVESTATICLIBS/libopencv_ml.a \$$OPENCVNATIVESTATICLIBS/libopencv_objdetect.a \$$OPENCVNATIVESTATICLIBS/libopencv_photo.a \$$OPENCVNATIVESTATICLIBS/libopencv_stitching.a \$$OPENCVNATIVESTATICLIBS/libopencv_video.a \$$OPENCVNATIVESTATICLIBS/libopencv_videoio.a \$$OPENCVNATIVESTATICLIBS/libopencv_calib3d.a \$$OPENCVNATIVESTATICLIBS/libopencv_core.a \$$OPENCVNATIVESTATICLIBS/libopencv_dnn.aLIBS += \$$OPENCV3RDPARTYLIBS/libtegra_hal.a \$$OPENCV3RDPARTYLIBS/libade.a \$$OPENCV3RDPARTYLIBS/libcpufeatures.a \$$OPENCV3RDPARTYLIBS/libIlmImf.a \$$OPENCV3RDPARTYLIBS/libittnotify.a \$$OPENCV3RDPARTYLIBS/liblibjpeg-turbo.a \$$OPENCV3RDPARTYLIBS/liblibopenjp2.a \$$OPENCV3RDPARTYLIBS/liblibpng.a \$$OPENCV3RDPARTYLIBS/liblibprotobuf.a \$$OPENCV3RDPARTYLIBS/liblibtiff.a \$$OPENCV3RDPARTYLIBS/liblibwebp.a \$$OPENCV3RDPARTYLIBS/libtbb.a} else {error("Unsupported architecture: $$ANDROID_TARGET_ARCH")}
}

其它

OpenCV 4.10官方文档
Custom-OpenCV-Android-SDK-and-AAR-package-build
开源Android投屏软件scrcpy,需要开启USB调试
OpenCV for android编译, 需要梯子
OpenCV for android编译, 需要梯子

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

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

相关文章

十三、【源码】ResultMap解析

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/13-resultMap ResultMap解析 分为两部分&#xff1a;解析和使用 1.解析 解析XML的时候单独解析所有的resultMap标签&#xff0c;封装成Re…

MySQL 核心模块揭秘 | 19 期 | 锁模块里有什么?什么样?

InnoDB 中管理表锁和行锁的锁模块&#xff0c;也就是传说中的锁子系统&#xff0c;在内存里是什么样的&#xff1f; 作者&#xff1a;操盛春&#xff0c;爱可生技术专家&#xff0c;公众号『一树一溪』作者&#xff0c;专注于研究 MySQL 和 OceanBase 源码。 爱可生开源社区出品…

LabVIEW开发EOL功能测试系统

LabVIEW开发EOL功能测试系统 介绍了一种基于LabVIEW开发的EOL功能测试系统方案&#xff0c;涵盖软件架构、工作流程、模块化设计、低耦合性、易于修改与维护、稳定性及硬件选型。系统通过高效的CAN通信实现对电机控制器的全面测试&#xff0c;确保运行可靠并支持未来的升级需求…

危机公关之负面信息优化技巧解析

当今时代&#xff0c;网络发布信息没有任何门槛&#xff0c;任何人可以通过互联网发布信息&#xff0c;这使负面信息产生的可能性大大提高&#xff0c;企业形成危机的可能性也大大提高。针对网络上的负面信息处理得当可能并不会对品牌造成伤害&#xff0c;处理不当就很可能给企…

QT之可拖动布局研究

1. 背景 最开始只用到了最基本的水平布局 、垂直布局。它的好处就是窗口整体缩放后&#xff0c;控件也自动等比例缩放。 但是比如水平布局之中的控件宽度比例、垂直布局之中的控件高度比例都是固定的。 平时也不怎么开发界面&#xff0c;最近有个需求&#xff0c;想界面上的…

Atlassian企业日技术分享:AI在ITSM中的创新实践与应用、Jira服务管理平台AI功能介绍

2024年5月17日&#xff0c;Atlassian中国合作伙伴企业日活动在上海成功举办。活动以“AI协同 创未来——如何利用人工智能提升团队协作&#xff0c;加速产品交付”为主题&#xff0c;深入探讨了AI技术在团队协作与产品交付中的创新应用与实践&#xff0c;吸引了众多业内专家、企…

深圳比创达电子EMC|EMC与EMI一站式解决方案:攻克电磁兼容难题

在当今这个科技日新月异、电子产品层出不穷的时代&#xff0c;电磁兼容&#xff08;EMC&#xff09;与电磁干扰&#xff08;EMI&#xff09;问题愈发凸显其重要性。为了确保电子设备的正常运行&#xff0c;减少电磁干扰对环境和人体的影响&#xff0c;EMC与EMI一站式解决方案成…

【回眸】Linux内核(十)system()函数与popen()函数

前言 system()函数的作用是执行一个shell脚本或者shell指令 popen与system()函数类似,不同点是popen()函数可以获取运行的shell脚本或者命令的输出结果 system() 函数参数 #include <stdlib.h> int system(const char *comand) 参考示例代码: #include <stdio.…

2023年全国消费品“增品种、提品质、创品牌”三品战略发展成果报告

来源&#xff1a;赛迪&欧特欧 近期历史回顾&#xff1a; 2023工业无线电磁环境白皮书——有色金属制造行业.pdf 2024出海企业人才发展实践指南.pdf 2024年全球电子商务市场.pdf 宝钢低碳钢铁技术策划及开发-钟勇.pdf 2023-2024年度中国智能制造产业发展报告.pdf 2024精准医…

【AI大模型】Function Calling

目录 什么是Function Calling 示例 1&#xff1a;调用本地函数 Function Calling 的注意事项 支持 Function Calling 的国产大模型 百度文心大模型 MiniMax ChatGLM3-6B 讯飞星火 3.0 通义千问 几条经验总结 什么是Function Calling Function Calling 是一种函数调用机…

【C++ | 构造函数】类的构造函数详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-06-06 0…

HCIA-RS基础-VLAN配置

目录 前言创建拓扑创建VLAN查看创建的VLAN配置trunk口并放行VLAN配置access接口查看所有vlan基本信息测试网络连通性命令合集 前言 VLAN定义&#xff1a;VLAN是一种将局域网内的设备从逻辑上划分成一个个网段&#xff0c;从而实现虚拟工作组的新兴数据交换技术。VLAN优点&…

【面试笔记】嵌入式软件工程师,汽车电子软件相关

文章目录 1. C语言基础1.1 const1.2 static1.3 回调函数的用法1.4 宏定义1.5 编译、链接过程1.6 堆与栈的区别&#xff1f;1.7 简单的字符串算法题&#xff0c;C语言实现1.7.1 给定一个字符串&#xff0c;按顺序筛选出不重复的字符组成字符串&#xff0c;输出该字符串1.7.2 给定…

Python3 迭代器和生成器

前言 本文主要介绍Python中的迭代器和生成器&#xff0c;主要内容包括 迭代器概述、生成器简介。 文章目录 前言一、迭代器简介二、生成器简介 一、迭代器简介 在 Python 中&#xff0c;迭代器(iterator)是一个实现了迭代器协议&#xff08;Iterator Protocol&#xff09;的…

opencv进阶 ——(十一)基于RMBG实现生活照生成寸照

实现步骤 1、检测人脸&#xff0c;可以使用opencv自带的级联分类器或者dlib实现人脸检测 2、放大人脸范围&#xff0c;调整到正常寸照尺寸 3、基于RMGB算法得到人像掩码 4、生成尺寸相同的纯色背景与当前人像进行ALPHA融合即可 alpha融合实现 void alphaBlend(cv::Mat&…

1 机器人软件开发学习所需通用技术栈(一)

机器人软件工程师技术路线&#xff08;如有缺失&#xff0c;欢迎补充&#xff09; 1. 机器人软件开发工程师技术路线 1.1 基础知识 C/C编程&#xff1a;掌握C/C语言基础&#xff0c;包括数据结构、算法、内存管理等。操作系统&#xff1a;了解Linux或Windows等操作系统的基本…

2.1 初识Windows程序

Windows程序设计是一种面向对象的编程。Windows操作系统以数据结构的形式定义了大量预定义的对象作为操作系统的数据类型。Windows动态链接库提供了各种各样的API接口函数供Windows应用程序调用。一个Windows应用程序是运行在Windows操作系统之上的。这些API接口函数的调用所实…

【Vue】路由的基本使用

文章目录 一、固定5个固定的步骤二、代码示例三、两个核心步骤四、完整代码 vue-router插件作用 修改地址栏路径时&#xff0c;切换显示匹配的组件 说明 Vue 官方的一个路由插件&#xff0c;是一个第三方包 官网 https://v3.router.vuejs.org/zh/ VueRouter的使用&#xff0…

TCP/IP协议介绍——三次握手四次挥手

TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff09;是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议&#xff0c;而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议…

CSS学习|css三种导入方式、基本选择器、层次选择器、结构伪类选择器、属性选择器、字体样式、文本样式

第一个css程序 css程序都是在style标签中书写 打开该网页&#xff0c;可以看到h1标签中的我是标题被渲染成了红色 可以在同级目录下创建一个css目录&#xff0c;专门存放css文件&#xff0c;可以和html分开编写 然后在html页面中&#xff0c;利用link标签以及css文件地址&…