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

news2024/10/6 1:42:21

简介

前两天刚好更新了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-sdk
    OPENCV_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-v7a
        OPENCVNATIVESTATICLIBS = $$OPENCV_ANDROID/sdk/native/staticlibs/armeabi-v7a
        OPENCVNATIVELIBS = $$OPENCV_ANDROID/sdk/native/libs/armeabi-v7a
        OPENCV3RDPARTYLIBS=$$OPENCV_ANDROID/sdk/native/3rdparty/libs/armeabi-v7a

        android_add_jni_libs.path = $$OPENCVNATIVELIBS
        android_add_jni_libs.sources = $$OPENCVNATIVELIBS/libopencv_java4.so

        LIBS += \
            $$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.a


        LIBS += \
            $$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.coloradmin.cn/o/1796441.html

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

相关文章

VS2015 +Qt 新建单元测试工程报错error LNK2019,error LNK2001: 无法解析的外部符号 WinMain

项目场景&#xff1a; 使用Qt5.9.9和vs2015进行单元测试工程的创建 问题描述 创建完成后&#xff0c;编译项目&#xff0c;报错&#xff1a; error LNK2019&#xff0c;error LNK2001: 无法解析的外部符号 WinMain 原因分析&#xff1a; 原因是笔者创建工程的时候&#xf…

创新案例 | AI数据驱动下的全域数字化转型的五大关键洞见

近年来通过全域数字化转型在竞争激烈的市场中脱颖而出。传统零食行业面临市场竞争加剧和消费者需求多样化的挑战&#xff0c;如何利用数据驱动和AI技术&#xff0c;能更好地实现会员运营效率和用户满意度的显著提升呢&#xff1f;本文将探讨全域数字化转型的五大关键洞见&#…

SQL刷题笔记day8——SQL进阶——表与索引操作

目录 1 创建一张新表 2 修改表 3 删除表 4 创建索引 5 删除索引 1 创建一张新表 我的答案 create table if not exists user_info_vip (id int(11) primary key auto_increment Comment自增ID, # 有了主键就不用写not nul了 uid int(11) unique not null Comment用户ID, …

SpringCloud Gateway中Route Predicate Factories详细说明

官网地址&#xff1a;https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。 Spring Cloud Gateway …

高效学习LabVIEW的方法

学习LabVIEW可以通过系统化课程、在线资源、自学实验、参与论坛、结合实际项目等多角度进行。系统课程提供全面基础&#xff0c;在线资源便于查漏补缺&#xff0c;自学实验强化理解&#xff0c;论坛互动解决疑难&#xff0c;结合实际项目应用提高实践技能。结合项目学习是最高效…

数据采集边缘网关解决企业数据采集痛点-天拓四方

随着信息技术的快速发展&#xff0c;企业对于数据采集和处理的需求日益增长。然而&#xff0c;传统的数据采集方式往往面临着数据量大、传输延迟、安全性不足等问题&#xff0c;给企业的运营和管理带来了诸多挑战。在这样的背景下&#xff0c;数据采集边缘网关应运而生&#xf…

Python | Leetcode Python题解之第136题只出现一次的数字

题目&#xff1a; 题解&#xff1a; class Solution:def singleNumber(self, nums: List[int]) -> int:return reduce(lambda x, y: x ^ y, nums)

MyEclipse中properties文件中文乱码(Unicode字符)解决办法

程序代码园发文地址&#xff1a;MyEclipse中properties文件中文乱码&#xff08;Unicode字符&#xff09;解决办法-程序代码园小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,MyEclipse中properties文件中文乱码&#xff08;Unicode字符&#xff09;解决办法htt…

从入门到精通:Java Lambda运算符详解!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

LINUX----进程替换,exec族函数

execl族函数的作用 exel族函数用于调用一个已经存在的可执行程序,将该程序的运行需要的代码区和数据区的数据覆盖原进程,这样就可以实现在一个进程中调度另一个进程. 简单实现一个小功能来看一看 mytest.c #include <stdio.h> #include <unistd.h>int main(){print…

UnityLeapMotion流程记录

突然接到一个LeapMotion的项目&#xff0c;回想起上次做LeapMotion还是在几年前&#xff0c;但是当时没有去记录&#xff0c;所以这次就相当于是重新走了一遍流程。很苦恼&#xff0c;赶紧记录下来。防止之后忘记。这次的需求还是比较简单的&#xff0c;用手滑动控制图片序列播…

MyBatisPlus——入门到进阶

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。&#x1f34e;个人主页&#xff1a;Meteors.的博客&#x1f49e;当前专栏&#xff1a;知识分享、知识备份✨特色专栏&#xff1a; 知识分享…

C++中的priority_queue和deque以及适配器

C中的priority_queue和deque 一丶 priority_queue1.1 priority_queue的介绍1.2 priority_queue的使用1.3 priority_queue的模拟实现 二丶 deque2.1 deque的简单介绍2.2 deque的缺陷2.3 为什么要选择deque作为stack和queue的迭代器 三丶 容器适配器3.1 什么是适配器3.2 STL标准库…

kafka-消费者组(SpringBoot整合Kafka)

文章目录 1、消费者组1.1、使用 efak 创建 主题 my_topic1 并建立6个分区并给每个分区建立3个副本1.2、创建生产者发送消息1.3、application.yml配置1.4、创建消费者监听器1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1.7、引入spring-kafka依赖1.8、消费…

【Qt秘籍】[010]-Qt常用控件

一、控件概述 在GUI&#xff08;图形用户界面&#xff09;开发领域&#xff0c;Qt无疑是众多开发者心中的首选框架之一。它不仅跨平台、功能强大&#xff0c;而且拥有丰富且灵活的控件库&#xff0c;使得开发者能够快速构建美观、高效的用户界面。对于初学者而言&#xff0…

万里长城第一步——尚庭公寓【技术概述】

简略版&#xff1a; 项目概述主要是移动端&#xff08;房源检索&#xff1b;预约看房&#xff0c;租赁管理&#xff0c;浏览历史&#xff09;和后台管理&#xff08;管理员对房源进行操作&#xff09;&#xff1b; 项目使用前后端分离的方法&#xff0c;主要以后端为主&#xf…

CSS真题合集(一)

CSS真题合集&#xff08;一&#xff09; 1. 盒子模型1.1 盒子模型的基本组成1.2 盒子模型的实际大小1.3 盒子模型的两种类型1.4 设置盒子模型1.5 弹性盒子模型 2. BFC2.1 主要用途2.2 触发BFC的方法2.2 解决外边距的塌陷问题&#xff08;垂直塌陷&#xff09; 3. 响应式布局3.1…

Django 外键关联数据

在设计数据库的时候&#xff0c;是得需要通过外键的形式将各个表进行连接。 原先的表是这样的 要想更改成这样&#xff1a; 下面是操作步骤&#xff1a; 有两张表是关联的 # 在 models.py 里创建class Department(models.Model):"""部门表""&quo…

Qt for android : 调用 OpenCV库错误集(To Be Continue)

error: error: undefined symbol: AMediaExtractor_new 在调用 VideoCapture等库时出现 解决: LIBS -lmediandk

【ROS2大白话】四、ROS2非常简单的传参方式

系列文章目录 【ROS2大白话】一、ROS2 humble及cartorgrapher安装 【ROS2大白话】二、turtlebot3安装 【ROS2大白话】三、给turtlebot3安装realsense深度相机 【ROS2大白话】四、ROS2非常简单的传参方式 文章目录 系列文章目录前言一、launch文件传参的demo1. 编写launch.py文…