当前位置: 首页 > article >正文

【Android】jni开发之导入opencv和libyuv来进行图像处理

做视频图像处理时需要对其进行水印的添加,放在应用层调用工具性能方面不太满意,于是当下采用opencv+libyuv方法进行处理。

对于Android的jni开发不是很懂,我的需求是导入opencv方便在cpp中调用,但目前找到的教程都是把opencv作为模块进行导入,在java层查看。

摸索了一段时间终于搞完了!

1.下载对应的openCV包(我目前版本为4.10.0)

opencv下载
在这里插入图片描述
解压得到:
在这里插入图片描述

2.AS中进行配置

2.1.把opencv的include文件夹复制到cpp目录下

在这里插入图片描述

2.2.把opencv的libs放置到与cpp目录同级的的jniLibs目录下

按需选择,我项目只需要前两个
在这里插入图片描述
项目结构如下:
在这里插入图片描述

3.对build.gradle(:模块名)内容进行修改

android {
  defaultConfig {
    externalNativeBuild {
      cmake {
        cppFlags ''
        arguments "-DANDROID_STL=c++_shared"
      }
    }
    ndk {
      abiFilters 'arm64-v8a','armeabi-v7a'
    }
  }

  externalNativeBuild {
    cmake {
      path file('src/main/cpp/CMakeLists.txt')
      version '3.22.1'
    }
  }
  sourceSets {
    main {
      jniLibs.srcDirs = ['src/main/jniLibs'] //指定库的位置
    }
  }
}

4.对CMakeLists.txt进行修改

# 设置 OpenCV 的头文件路径
include_directories(${CMAKE_SOURCE_DIR}/cpp/include)

# 设置库的路径  采用文件的绝对路径  libyuv和opencv在同一层
set(OpenCV_LIBS_DIR "E:/AndroidProject/Demo/app/src/main/jniLibs/${ANDROID_ABI}")

# 导入 OpenCV 的共享库
add_library(opencv_java4 SHARED IMPORTED)
set_target_properties(opencv_java4 PROPERTIES IMPORTED_LOCATION
        ${OpenCV_LIBS_DIR}/libopencv_java4.so

# 设置头文件
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include)

target_link_libraries(${CMAKE_PROJECT_NAME}
    android
    opencv_java4 #链接声明
    log)

测试cpp中是否可用opencv
导入头文件即可:#include “opencv2/opencv.hpp”
没有报错即可正常使用,如果提示找不到opencv.hpp,则查看CMakeLists.txt中的路径是否正确

libyuv导入同理,用的现成编译好的so库和头文件
libyuv
下载解压后得到:
在这里插入图片描述
头文件在jni/include,库在libs

最后,完整的CMakeLists.txt如下

cmake_minimum_required(VERSION 3.22.1)

project("dvr")

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

# 设置 OpenCV 的头文件路径
include_directories(${CMAKE_SOURCE_DIR}/cpp/include)
# 导入 OpenCV 的共享库
set(OpenCV_LIBS_DIR "E:/AndroidProject/Demo/app/src/main/jniLibs/${ANDROID_ABI}")
add_library(opencv_java4 SHARED IMPORTED)
set_target_properties(opencv_java4 PROPERTIES IMPORTED_LOCATION
        ${OpenCV_LIBS_DIR}/libopencv_java4.so)

# libyuv
add_library(yuv SHARED IMPORTED)
set_target_properties(yuv PROPERTIES IMPORTED_LOCATION
        ${OpenCV_LIBS_DIR}/libyuv.so)

add_library(${CMAKE_PROJECT_NAME} SHARED
    dvr.cpp)

target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_link_libraries(${CMAKE_PROJECT_NAME}
    android
        opencv_java4
        yuv
    log)

图像处理什么的,opencv这些都导入成功了,自然也就简单了


http://www.kler.cn/a/535117.html

相关文章:

  • 10. 神经网络(二.多层神经网络模型)
  • K8s 分布式存储后端(K8s Distributed Storage Backend)
  • 自学Java-面向对象编程入门
  • 【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据
  • ASP.NET Core与EF Core的集成
  • 笔试-业务逻辑4
  • 高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案
  • Meta Sapiens AI论文解读:人类视觉模型基石初现,AI 未来走向何方?
  • 115,【7】 攻防世界 web fileinclude
  • 逐笔成交逐笔委托Level2高频数据下载和分析:20250206
  • (3)yaml语法
  • 无人机测绘技术,为行业开启解决方案新篇章!
  • 4.攻防世界 unseping
  • 设计模式Python版 享元模式
  • 【翻译+论文阅读】DeepSeek-R1评测:粉碎GPT-4和Claude 3.5的开源AI革命
  • GC日志的解读
  • Ubuntu 上可以安装ms sqlserver?(不能上网)
  • Flutter初相识
  • 来 Gitcode 免费体验 DeepSeek 蒸馏模型,开启 AI 探索新旅程
  • day33-数据同步rsync
  • deepseek来讲lua
  • 【centOS】搭建公司内网git环境-GitLab 社区版(GitLab CE)
  • 2月7号习题
  • Matlab个性化绘图第8期—进度柱状图
  • LeetCode 每日一题 2025/1/27-2025/2/2
  • HOW - 个人创业(准备篇)