概述
开发配置环境:
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复