我的问题是在Android中使用CmakeLists.txt文件在我的原生代码中使用openCV。我阅读了以下问题,然后按照说明操作,更改了我的CmakeLists.txt文件和其他gradle设置。 Can OpenCV for Android leverage the standard C++ Support to get native build support on Android Studio 2.2 for Windows? 现在我在java代码中使用opencv。 但在我的原生代码中,openCV仍然无法使用。我正在尝试使用
#include <opencv2/core.hpp>
在native-lib.cpp中行但是收到错误
Error:(3, 10) fatal error: 'opencv2/core.hpp' file not found
这是我的CmakeLists.txt文件:
cmake_minimum_required(VERSION 3.4.1)
set(pathToProject C:/Users/lenovo/AndroidStudioProjects/AdviserOpenCV2)
set(pathToOpenCV C:/Users/lenovo/Desktop/openCV/opencv-3.4.1-android-sdk)
#Two sets suggested by Bruno Alexandre Krinski 20160825
set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
#Addition suggested by Bruno Alexandre Krinski 20160825
include_directories(${pathToOpenCV}/sdk/native/jni/include)
#Added by IDE on project create
add_library( native-lib SHARED src/main/cpp/native-lib.cpp )
#Addition suggested by Bruno Alexandre Krinski 20160825
add_library( lib_opencv SHARED IMPORTED )
#Addition suggested by Bruno Alexandre Krinski 20160825
set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${pathToProject}/app/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so)
#Added by IDE on project create
find_library( log-lib log )
#Added by IDE on project create, Removed and replace with additional parameter suggested by Bruno Alexandre Krinski 20160825
target_link_libraries( native-lib lib_opencv ${log-lib} )
这是我的MainActivity及其正常工作。在屏幕textview中显示&#34; openCVLoader.initDebug,WORKING&#34;
package com.example.lenovo.adviseropencv2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import org.opencv.android.OpenCVLoader;
public class MainActivity extends AppCompatActivity {
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
System.loadLibrary("opencv_java3");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
if(!OpenCVLoader.initDebug()){
tv.setText(tv.getText() + "\n openCVLoader.initDebug, not working");
} else {
tv.setText(tv.getText() + "\n openCVLoader.initDebug, WORKING");
}
}
/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
}
android_gradle_build.json文件
{
"buildFiles" :
[
"C:/Users/lenovo/AndroidStudioProjects/AdviserOpenCV2/app/CMakeLists.txt"
],
"cleanCommands" :
[
"C:\\Users\\lenovo\\AppData\\Local\\Android\\Sdk\\cmake\\3.6.4111459\\bin\\cmake.exe --build C:\\Users\\lenovo\\AndroidStudioProjects\\AdviserOpenCV2\\app\\.externalNativeBuild\\cmake\\debug\\x86 --target clean"
],
"cppFileExtensions" : [ "cpp" ],
"libraries" :
{
"lib_opencv-Debug-x86" :
{
"abi" : "x86",
"artifactName" : "lib_opencv",
"buildType" : "debug",
"output" : "C:/Users/lenovo/AndroidStudioProjects/AdviserOpenCV2/app/src/main/jniLibs/x86/libopencv_java3.so",
"toolchain" : "2534711399"
},
"native-lib-Debug-x86" :
{
"abi" : "x86",
"artifactName" : "native-lib",
"buildCommand" : "C:\\Users\\lenovo\\AppData\\Local\\Android\\Sdk\\cmake\\3.6.4111459\\bin\\cmake.exe --build C:\\Users\\lenovo\\AndroidStudioProjects\\AdviserOpenCV2\\app\\.externalNativeBuild\\cmake\\debug\\x86 --target native-lib",
"buildType" : "debug",
"files" :
[
{
"flags" : " --target=i686-none-linux-android --gcc-toolchain=C:/Users/lenovo/AppData/Local/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64 --sysroot=C:/Users/lenovo/AppData/Local/Android/sdk/ndk-bundle/sysroot -Dnative_lib_EXPORTS -IC:\\Users\\lenovo\\Desktop\\openCV\\opencv-3.4.1-android-sdk\\sdk\\native\\jni\\include -isystem C:\\Users\\lenovo\\AppData\\Local\\Android\\sdk\\ndk-bundle\\sources\\cxx-stl\\gnu-libstdc++\\4.9\\include -isystem C:\\Users\\lenovo\\AppData\\Local\\Android\\sdk\\ndk-bundle\\sources\\cxx-stl\\gnu-libstdc++\\4.9\\libs\\x86\\include -isystem C:\\Users\\lenovo\\AppData\\Local\\Android\\sdk\\ndk-bundle\\sources\\cxx-stl\\gnu-libstdc++\\4.9\\include\\backward -isystem C:/Users/lenovo/AppData/Local/Android/sdk/ndk-bundle/sysroot/usr/include/i686-linux-android -D__ANDROID_API__=15 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -frtti -fexceptions -std=gnu++11 -O0 -fno-limit-debug-info -fPIC -c ",
"src" : "C:/Users/lenovo/AndroidStudioProjects/AdviserOpenCV2/app/src/main/cpp/native-lib.cpp",
"workingDirectory" : "C:/Users/lenovo/AndroidStudioProjects/AdviserOpenCV2/app/.externalNativeBuild/cmake/debug/x86"
}
],
"output" : "C:/Users/lenovo/AndroidStudioProjects/AdviserOpenCV2/app/build/intermediates/cmake/debug/obj/x86/libnative-lib.so",
"toolchain" : "2534711399"
}
},
"toolchains" :
{
"2534711399" :
{
"cCompilerExecutable" : "C:/Users/lenovo/AppData/Local/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe",
"cppCompilerExecutable" : "C:/Users/lenovo/AppData/Local/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
}
}
}
如何在Android中的cpp代码中使用OpenCV?