android studio opencv c++ jni环境集成教程 无需opencv manager
背景:c++代码移植到android. c++代码用到opencv jni库,花了很长时间,希望能帮到大家
前期准备:
opencv-3.4.1-android-sdk 自行官网下载
开始:
1. 新建一个support c++ android 项目
2. import module
3. 配置gradle和 当前项目一致。
4.依赖
5. main 目录下新建jniLibs 文件夹,打开 从opencv 官网下载的 OpenCV-android-sdk\sdk\native\libs 把libs 下的所有文件复制到 jniLibs里面。
注:不同文件夹对应不同cpu架构,集成opencv 2.4版本 会出现匹配不全的情况。若明确设备cpu架构,可添加过滤减少apk体积,如图
6. 简单调用:
public class ExampleActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 { private static final String TAG = "ExampleActivity"; private CameraBridgeViewBase mOpenCvCameraView; BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case BaseLoaderCallback.SUCCESS: Log.i("msg", "成功加载"); mOpenCvCameraView.enableView(); break; default: super.onManagerConnected(status); Log.i("msg", "加载失败"); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.fd_activity_surface_view); mOpenCvCameraView.setVisibility(CameraBridgeViewBase.VISIBLE); mOpenCvCameraView.setCvCameraViewListener(this); } @Override protected void onResume() { super.onResume(); if (!OpenCVLoader.initDebug()) { Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization"); //注释掉,无需opencv manager // OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_13, MainActivity.this, mLoaderCallback); } else { Log.d(TAG, "OpenCV library found inside package. Using it!"); mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); } } @Override public void onCameraViewStarted(int width, int height) { } @Override public void onCameraViewStopped() { } @Override public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { return inputFrame.rgba(); } }
7. 集成c++代码 所需opencv库
(1)打开cmakeList.txt
(2)添加open cv路径
#需要换成自己的sdk路径 注意复制路径的时候将 "\"换成"/" set( OpenCV_DIR C:/Users/EDZ/Downloads/opencv-3.4.1-android-sdk/OpenCV-android-sdk/sdk/native/jni ) find_package(OpenCV REQUIRED ) if(OpenCV_FOUND) include_directories(${OpenCV_INCLUDE_DIRS}) message(STATUS "OpenCV library status:") message(STATUS " version: ${OpenCV_VERSION}") message(STATUS " libraries: ${OpenCV_LIBS}") message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}") else(OpenCV_FOUND) message(FATAL_ERROR "OpenCV library not found") endif(OpenCV_FOUND)(3)add_library添加自己的c++文件
(4)建立连接
这样自己的C++代码 就可以找到所需的opencv头文件
希望可以帮到大家。有问题可以留言