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.pswp.cn/web/23013.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23013.shtml
英文地址,請注明出處:http://en.pswp.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;吸引了眾多業內專家、企…

ros1中的server服務的創建與使用函數指針類型別名請求處理函數

ros1中的server服務的創建與使用函數指針類型別名請求處理函數 法一: #include "ros/ros.h" //自定義消息 #include "trilateration/trilateration_srvs.h"void handleDeletePosint(const trilateration::trilateration_srvs::Request& req, trilate…

深圳比創達電子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優點&…

設計模式-單例模式(創建型)

創建型-單例模式 了解單例 單例模式是一種創建型設計模式&#xff0c;它提供了一種創建對象的最佳方式;它必須保證&#xff1a; 單例類只能有一個實例化對象&#xff1b;單例類必須創建自己的唯一實例&#xff1b;單例類必須給其他對象提供實例&#xff1b; 另外&#xff1a;…

【面試筆記】嵌入式軟件工程師,汽車電子軟件相關

文章目錄 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等操作系統的基本…

android 13 aosp 預置so庫

展訊對應的main.mk配置 device/sprd/qogirn**/ums***/product/***_native/main.mk $(call inherit-product-if-exists, vendor/***/build.mk)vendor/***/build.mk PRODUCT_PACKAGES \libtestvendor///Android.bp cc_prebuilt_library_shared{name:"libtest",srcs:…

2.1 初識Windows程序

Windows程序設計是一種面向對象的編程。Windows操作系統以數據結構的形式定義了大量預定義的對象作為操作系統的數據類型。Windows動態鏈接庫提供了各種各樣的API接口函數供Windows應用程序調用。一個Windows應用程序是運行在Windows操作系統之上的。這些API接口函數的調用所實…