在Android Studio中使用CMAKE构建在本机代码中使用openCV

时间:2018-03-25 13:14:16

标签: android opencv cmake android-ndk java-native-interface

我的问题是在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?

0 个答案:

没有答案