Qt+openCV学习笔记(八)openCV4.5.4+android如何使用动、静态库

本文详细介绍了在Android平台上使用OpenCV库的静态和动态链接方法,包括如何配置依赖库顺序,以及针对不同功能(如二维码识别)所需的库选择和配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

在Android下使用openCV的库,与在其他系统下的原理基本相同,但又有点差异。本次笔记记录下具体的使用方法,供小伙伴们参考

一、使用官方的静态库

静态库使用时,要注意,若库与库之前有相应的依赖,加载的先后顺序不变,若是无法预知需要使用哪些库,可以按照如下的方法测试需要哪些库

1.先放入$$ANDROID_OPENCV/libs/arm64-v8a/libopencv_java4.so在最下面

2.把第三方库放在前面

3.把$$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_core.a放在最前面

4.直接编译程序,等到源码报错时,查看报错的函数是存放于哪个库中,并直接添加到最前面

5.不断重复第4步,直到加入所有需要的库

6.若确认可以正常编译,开如注释掉第三方库,找出程序运行不需要的静态库,最终得到最小的库配置

以arm64-v8a为例,若需要使用二维码识别,最终要加入pro文件的内容如下

unix:!macx{
#添加opencv库(android arm64-v8a版)
contains(ANDROID_TARGET_ARCH,arm64-v8a) {
    message("arm64-v8a")

ANDROID_OPENCV = opencv_dir/opencv4.5.4/OpenCV-android-sdk/sdk/native

    INCLUDEPATH += $$ANDROID_OPENCV/jni/include/opencv2 \
                   $$ANDROID_OPENCV/jni/include

    LIBS += \
        $$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_objdetect.a \
        $$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_imgproc.a \
        $$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_core.a \
        $$ANDROID_OPENCV/3rdparty/libs/arm64-v8a/libcpufeatures.a \
        $$ANDROID_OPENCV/3rdparty/libs/arm64-v8a/libittnotify.a \
        $$ANDROID_OPENCV/3rdparty/libs/arm64-v8a/libquirc.a \
        $$ANDROID_OPENCV/3rdparty/libs/arm64-v8a/libtegra_hal.a \
        $$ANDROID_OPENCV/libs/arm64-v8a/libopencv_java4.so

}
#若不添加,打包时不加入
ANDROID_EXTRA_LIBS = opencv_dir/opencv4.5.4/OpenCV-android-sdk/sdk/native/libs/arm64-v8a/libopencv_java4.so
}

二、使用自行编译的静态库

 自行编译的静态库,同样需要注意有先后顺序。若库与库之前有相应的依赖,加载的先后顺序不变,若是无法预知需要使用哪些库,可以按照如下的方法测试需要哪些库

1.把第三方库放在前面

2.把$$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_core.a放在最前面

3.直接编译程序,等到源码报错时,查看报错的函数是存放于哪个库中,并直接添加到最前面

4.不断重复第4步,直到加入所有需要的库

5.若确认可以正常编译,开如注释掉第三方库,找出程序运行不需要的静态库,最终得到最小的库配置

以arm64-v8a为例,若需要使用微信二维码识别,最终要加入pro文件的内容如下

unix:!macx{
contains(ANDROID_TARGET_ARCH,arm64-v8a) {
    message("arm64-v8a")
ANDROID_OPENCV = opencv_dir/opencv4.5.4/build_android_arm64-v8a/install/sdk/native

    INCLUDEPATH += $$ANDROID_OPENCV/jni/include/opencv2 \
                   $$ANDROID_OPENCV/jni/include


LIBS += \
    $$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_wechat_qrcode.a \
    $$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_dnn.a \
    $$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_imgproc.a \
    $$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_calib3d.a \
    $$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_flann.a \
    $$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_features2d.a \
    $$ANDROID_OPENCV/staticlibs/arm64-v8a/libopencv_core.a \
    $$ANDROID_OPENCV/3rdparty/libs/arm64-v8a/libcpufeatures.a \
    $$ANDROID_OPENCV/3rdparty/libs/arm64-v8a/libittnotify.a \
    $$ANDROID_OPENCV/3rdparty/libs/arm64-v8a/libquirc.a \
    $$ANDROID_OPENCV/3rdparty/libs/arm64-v8a/libtegra_hal.a
}

三、使用自行编译的动态库

动态库无加载顺序,直接加入即可,但要注意加入ANDROID_EXTRA_LIBS中,否则打包时不会加入

直接编译程序,等到源码报错时,查看报错的函数是存放于哪个库中,并直接添加即可

以arm64-v8a为例,若需要使用微信二维码识别,最终要加入pro文件的内容如下

unix:!macx{
contains(ANDROID_TARGET_ARCH,arm64-v8a) {
    message("arm64-v8a")
ANDROID_OPENCV = opencv_dir/opencv4.5.4/build_android_arm64-v8a/install/sdk/native

    INCLUDEPATH += $$ANDROID_OPENCV/jni/include/opencv2 \
                   $$ANDROID_OPENCV/jni/include


LIBS += \
    $$ANDROID_OPENCV/libs/arm64-v8a/libopencv_wechat_qrcode.so \
    $$ANDROID_OPENCV/libs/arm64-v8a/libopencv_dnn.so \
    $$ANDROID_OPENCV/libs/arm64-v8a/libopencv_imgproc.so \
    $$ANDROID_OPENCV/libs/arm64-v8a/libopencv_calib3d.so \
    $$ANDROID_OPENCV/libs/arm64-v8a/libopencv_flann.so \
    $$ANDROID_OPENCV/libs/arm64-v8a/libopencv_features2d.so \
    $$ANDROID_OPENCV/libs/arm64-v8a/libopencv_core.so

ANDROID_EXTRA_LIBS = \
    opencv_dir/opencv4.5.4/build_android_arm64-v8a/install/sdk/native/libs/arm64-v8a/libopencv_core.so \
    opencv_dir/opencv4.5.4/build_android_arm64-v8a/install/sdk/native/libs/arm64-v8a/libopencv_features2d.so \
    opencv_dir/opencv4.5.4/build_android_arm64-v8a/install/sdk/native/libs/arm64-v8a/libopencv_flann.so \
    opencv_dir/opencv4.5.4/build_android_arm64-v8a/install/sdk/native/libs/arm64-v8a/libopencv_calib3d.so \
    opencv_dir/opencv4.5.4/build_android_arm64-v8a/install/sdk/native/libs/arm64-v8a/libopencv_imgproc.so \
    opencv_dir/opencv4.5.4/build_android_arm64-v8a/install/sdk/native/libs/arm64-v8a/libopencv_dnn.so \
    opencv_dir/opencv4.5.4/build_android_arm64-v8a/install/sdk/native/libs/arm64-v8a/libopencv_wechat_qrcode.so

}

后记:

在编译时,不勾选world,各个库要分散成多个文件,虽然可以减少打包后的程序体积,但不利于初学者学习

建议初学者,在编译时勾选world,以降低学习难度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁白杨树下꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值