我是靠谱客的博主 标致书包,最近开发中收集的这篇文章主要介绍error: undefined reference to 'cv::CascadeClassifier::detectMultiScale,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

开发配置环境:

ndk :r19_x86_x64

opencv sdk :v3.4.3

android studio 3.2

遇到问题:

在调试Android Studio的Jni通过Ndk编译opencv时遇到问题:

error: undefined reference to 'cv::CascadeClassifier::detectMultiScale

jni代码:

extern "C"  JNIEXPORT jlong JNICALL
Java_com_test_MainActivity_detectFaces(JNIEnv *env, jobject instance, jlong addrInputRgbaImage) {
    cv::Mat& imageInput = *(cv::Mat*)addrInputRgbaImage;
    cv::Mat imageGray;
    cv::cvtColor(imageInput,imageGray,cv::COLOR_RGBA2GRAY);
    auto width = imageInput.size().width;
    auto height = imageInput.size().height;
    if(faceDetecter != nullptr){
        std::vector<cv::Rect> faces;
        faceDetecter->detectMultiScale( imageGray, faces, 1.1, 2, 
            0|cv::CASCADE_SCALE_IMAGE, cv::Size(width/10, height/5));
        for(auto faceRect: faces){
            cv::rectangle(imageInput,faceRect,cv::Scalar(255,0,0),3);
        }
    }
    return 0;
}

主要问题在 faceDetecter->detectMultiScale(... ...)

解决方法:

app的build.gradle文件中添加标准 gnustl_static(ndk-r16版本支持) ,而不是c++_static(ndk新版本)

    defaultConfig {
        ... ...
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -frtti -fexceptions"
                arguments '-DANDROID_STL=gnustl_static'
            }
        }
    }

这时由于我的ndk是r19版本:

所以报错如下:

CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage

CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage

-- Configuring incomplete, errors occurred!

这时候我们需要把ndk更新为r16版本即可解决,

https://dl.google.com/android/repository/android-ndk-r16-windows-x86.zip

https://dl.google.com/android/repository/android-ndk-r16-windows-x86_64.zip
下载r16 ,并解压你的sdk目录,通过选择File->project structure...->SDK Location 更改ndk目录:

总结分析:

不能确定是否为ndk向下支持问题,应该是ndk和opencv版本匹配问题,目前还没有找到高版本ndk调用opencv方法,但是如果你感兴趣的话可以尝试下,最新版本的opencv和ndk的匹配是否存在问题。

最后

以上就是标致书包为你收集整理的error: undefined reference to 'cv::CascadeClassifier::detectMultiScale的全部内容,希望文章能够帮你解决error: undefined reference to 'cv::CascadeClassifier::detectMultiScale所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部