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

【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}androidopencv_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} SHAREDdvr.cpp)target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_link_libraries(${CMAKE_PROJECT_NAME}androidopencv_java4yuvlog)

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

http://www.lryc.cn/news/532685.html

相关文章:

  • 【Elasticsearch】terms聚合误差问题
  • 深入理解 `box-sizing: border-box;`:CSS 布局的利器
  • 【原子工具】快速幂 快速乘
  • Apache SeaTunnel 整体架构运行原理
  • Nginx如何实现 TCP和UDP代理?
  • 蓝桥杯思维训练营(三)
  • 开箱即用的.NET MAUI组件库 V-Control 发布了!
  • 动手学图神经网络(9):利用图神经网络进行节点分类 WeightsBiases
  • 【文件上传、秒传、分片上传、断点续传、重传】
  • 使用Pygame制作“打砖块”游戏
  • 【完整版】DeepSeek-R1大模型学习笔记(架构、训练、Infra)
  • 深入解析:如何利用 Python 爬虫获取商品 SKU 详细信息
  • 【3】高并发导出场景下,服务器性能瓶颈优化方案-文件压缩
  • FPGA|生成jic文件固化程序到flash
  • 【ArcGIS_Python】使用arcpy脚本将shape数据转换为三维白膜数据
  • 用Python获取股票数据并实现未来收盘价的预测
  • Rust 所有权特性详解
  • Gateway路由匹配规则详解
  • 项目实操:windows批处理拉取git库和处理目录、文件
  • 前端开发知识梳理 - HTMLCSS
  • nginx中的proxy_set_header参数详解
  • MapReduce是什么?
  • Text2Sql:开启自然语言与数据库交互新时代(3030)
  • 《图解设计模式》笔记(五)一致性
  • 华为支付-免密支付接入免密代扣说明
  • React组件中的列表渲染与分隔符处理技巧
  • 【Pytorch和Keras】使用transformer库进行图像分类
  • 快速了解 c++ 异常处理 基础知识
  • deepseek API 调用-python
  • 玩转Gin框架:Golang使用Gin完成登录流程