【问题标题】:How to use/link OpenCV 3.4.1 in Qt for Android?如何在 Qt for Android 中使用/链接 OpenCV 3.4.1?
【发布时间】:2018-05-18 09:26:47
【问题描述】:

我想在我的 Qt for Android 项目中使用 OpenCV 3.4.1,但我遇到如下构建错误:

.../libopencv_core.a(system.cpp.o):system.cpp:function cv::HWFeatures::initialize(): error: undefined reference to 'android_getCpuFeatures'
.../libopencv_core.a(arithm.cpp.o):arithm.cpp:function cv::hal::cmp8u(unsigned char const*, unsigned int, unsigned char const*, unsigned int, unsigned char*, unsigned int, int, int, void*): error: undefined reference to 'carotene_o4t::isSupportedConfiguration()'
.../libopencv_core.a(arithm.cpp.o):arithm.cpp:function cv::hal::cmp8u(unsigned char const*, unsigned int, unsigned char const*, unsigned int, unsigned char*, unsigned int, int, int, void*): error: undefined reference to 'carotene_o4t::cmpGE(carotene_o4t::Size2D const&, unsigned char const*, int, unsigned char const*, int, unsigned char*, int)'

Full error file here (堆栈溢出太大)

这是我在 *.pro 文件中写的:

QT += core quick quickcontrols2 widgets
CONFIG += c++11 console

#...

OPENCVSDKNATIVE = $$PWD/3rdparty/opencv-3.4.1-android-sdk/sdk/native

INCLUDEPATH += $$OPENCVSDKNATIVE/jni/include

equals(ANDROID_TARGET_ARCH, armeabi-v7a) {
    message("setting armeabi-v7a OPENCV libs")

    # OPENCV LIBS
    LIBS += -L"$$OPENCVSDKNATIVE/3rdparty/libs/armeabi-v7a" -llibtiff -llibjpeg -llibjasper -llibpng -llibwebp -lIlmImf -ltbb -ltegra_hal
    LIBS += -L"$$OPENCVSDKNATIVE/staticlibs/armeabi-v7a" -lopencv_core -lopencv_imgcodecs -lopencv_imgproc

    ANDROID_EXTRA_LIBS += $$OPENCVSDKNATIVE/libs/armeabi-v7a/libopencv_java3.so
}

以及我在 cpp 代码中输入的内容:

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>

int main (int argc, char *argv[]){
    QString imgPath = "path_to_my_image.jpg";     
    cv::Mat image = cv::imread(imgPath.toStdString().c_str());
    //...
}

如何在 Qt for Android 中使用/链接 OpenCV 3.4.1 ?

使用的版本:

  • 来自here的OpenCV SDK for Android 3.4.1
  • Qt 5.10.1
  • Qt Creator 4.6.1
  • Android for armeabi-v7a(GCC 4.9,Qt 5.10.1 for Android armv72)发布

EDIT 1:我更新了 *.pro 文件中的 LIBS var,但仍然有问题

LIBS +=\
    -L"$$OPENCVSDKNATIVE/3rdparty/libs/armeabi-v7a"\
    -L"$$OPENCVSDKNATIVE/staticlibs/armeabi-v7a"\
    -llibtiff -llibjpeg -llibjasper -llibpng -lIlmImf   -llibprotobuf\
    -lopencv_core -lopencv_imgproc -lopencv_imgcodecs\
    -ltbb -lcpufeatures -ltegra_hal

【问题讨论】:

  • 我使用的是官方版本和 armeabi-v7a 版本,所以我看不出有什么问题。
  • 对于第一个链接器错误,我认为你需要链接到cpufeaturesdeveloper.android.com/ndk/guides/cpu-features
  • 另外两个:链接的顺序很重要。您可能必须最后拥有-ltegra_hal。只是猜测,因为我没有使用 OpenCV 的经验。
  • 你知道如何使用 QtCreator 链接 cpufeatures 吗?我试图把 -ltegra_hal 作为最后一个,仍然得到“未定义的引用”错误。
  • 我的最佳猜测:将-lcpufeatures 添加到您的LIBS

标签: android qt opencv qmake


【解决方案1】:

由于 *.pro 文件中 LIBS 变量的错误定义而出现问题。

这是一个有效的(我添加了-lcpufeatures 并将库按好顺序)

    LIBS +=\
    -L"$$OPENCVSDKNATIVE/3rdparty/libs/armeabi-v7a"\
    -L"$$OPENCVSDKNATIVE/staticlibs/armeabi-v7a"\
     -lopencv_imgcodecs -lopencv_imgproc -lopencv_core -llibtiff -llibjpeg -llibjasper -llibpng -lIlmImf -llibprotobuf -llibwebp -ltbb -lcpufeatures -ltegra_hal 

【讨论】:

    猜你喜欢
    • 2017-07-25
    • 2018-09-02
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2020-05-26
    • 2015-11-06
    相关资源
    最近更新 更多