目前我正在开发一个使用OpenCV3进行实时视频处理(应用一组彩色滤镜)的项目,我设法让它与

Java一起使用而没有任何问题.

我接下来要做的是通过NDK将所有Java逻辑实现到C(以提高性能).这样我就不需要将MAT对象转换回字节缓冲区和堡垒,从而节省了几个周期.但我真的很难尝试使用gradle链接.so,.a静态库和头文件,以便在我的.CPP文件上使用.

这是我正在使用的gradle文件:

apply plugin: 'com.android.model.application'

def opencvandroid_sdk_path = file(project(':opencvandroid').projectDir).absolutePath + "/src/main"

model {

repositories {

libs(PrebuiltLibraries) {

opencv {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_calib3d.a")

}

}

opencv1 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_core.a")

}

}

opencv2 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_features2d.a")

}

}

opencv3 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_flann.a")

}

}

opencv4 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_highgui.a")

}

}

opencv5 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_imgcodecs.a")

}

}

opencv6 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_imgproc.a")

}

}

opencv7 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_ml.a")

}

}

opencv8 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_objdetect.a")

}

}

opencv9 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_photo.a")

}

}

opencv10 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_shape.a")

}

}

opencv11 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_stitching.a")

}

}

opencv12 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_superres.a")

}

}

opencv13 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_video.a")

}

}

opencv14 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_videoio.a")

}

}

opencv15 {

headers.srcDir "${opencvandroid_sdk_path}/jni/include/opencv2"

binaries.withType(StaticLibraryBinary) {

staticLibraryFile = file("${opencvandroid_sdk_path}/jniLibs/${targetPlatform.getName()}/libopencv_videostab.a")

}

}

}

}

android {

compileSdkVersion = 23

buildToolsVersion = "23.0.2"

defaultConfig.with {

applicationId = "com.example"

minSdkVersion.apiLevel = 16

targetSdkVersion.apiLevel = 23

versionCode = 1

versionName = "1.0"

}

}

/*

* native build settings

*/

android.ndk {

moduleName = "hello-jni"

/*

* Other ndk flags configurable here are

* cppFlags += "-fno-rtti"

* cppFlags += "-fno-exceptions"

* ldLibs = ["android", "log"]

* stl = "system"

*/

platformVersion = 16 //same as minSdkVersion.apiLevel for better compatibility

/*def jniPath = opencvandroid_sdk_path + "jniLibs"

cppFlags += "-I${file(jniPath)}".toString()

file(jniPath).eachDirRecurse { dir ->

cppFlags += "-I${file(dir)}".toString()

}*/

stl = "c++_static"

ldLibs.addAll(["atomic", "log", "android"])

}

android.sources {

main {

jni {

dependencies {

library "opencv1" linkage "static"

library "opencv2" linkage "static"

library "opencv3" linkage "static"

library "opencv4" linkage "static"

library "opencv5" linkage "static"

library "opencv6" linkage "static"

library "opencv7" linkage "static"

library "opencv8" linkage "static"

library "opencv9" linkage "static"

library "opencv10" linkage "static"

library "opencv11" linkage "static"

library "opencv12" linkage "static"

library "opencv13" linkage "static"

library "opencv14" linkage "static"

library "opencv15" linkage "static"

}

}

}

}

android.buildTypes {

release {

minifyEnabled = false

}

}

}

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

testCompile 'junit:junit:4.12'

compile 'com.android.support:appcompat-v7:23.1.1'

compile 'com.android.support:design:23.1.1'

compile project(':opencvandroid')

}

我将我的gradle文件基于我在github上找到的this示例.

现在,我发现尝试这样做的一个问题是OPENCV有几个静态库文件,所以正如post所说,我必须在gradle上的不同lib上添加每个文件以便链接它们,所以这就是为什么我的gradle文件充满了重复的库定义.

现在,当我试图在我的.CPP代码中包含头文件时,Android Studio找不到它们(甚至不能使用命名空间).这是我的CPP代码:

#include

#include "opencv2/core/core.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include "opencv2/features2d/features2d.hpp"

#include

using namespace std;

using namespace cv;

extern "C" {

JNIEXPORT void JNICALL Java_com_example_Tutorial2Activity_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba);

JNIEXPORT void JNICALL Java_com_example_Tutorial2Activity_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba)

{

Mat& mGr = *(Mat*)addrGray;

Mat& mRgb = *(Mat*)addrRgba;

vector v;

Ptr detector = FastFeatureDetector::create(50);

detector->detect(mGr, v);

for( unsigned int i = 0; i < v.size(); i++ )

{

const KeyPoint& kp = v[i];

circle(mRgb, Point(kp.pt.x, kp.pt.y), 10, Scalar(255,0,0,255));

}

}

}

我错过了一些东西,以便正确地链接它们吗?

opencv4android编译静态库,Android Studio链接OpenCV静态库相关推荐

  1. android 函数库,Android Studio 实现开源函数库的离线依赖-greenDAO 3 为例

    @author ASCE1885的 Github 简书 微博 CSDN 知乎 本文由于潜在的商业目的,不开放全文转载许可,谢谢! nami.png-599.1kB Android 应用开发中,经常需要 ...

  2. 【Android FFMPEG 开发】Android Studio 中配置 FFMPEG 库注意事项 ( 静态库 链接 libz.so 库 | 导入 FFMPEG 函数库顺序 )

    文章目录 I . 导入 z 库 ( FFMPEG 动态库 与 静态库区别 ) II . FFMPEG 库引入顺序 III . Android Studio 中 FFMPEG 静态库引入完整 CMake ...

  3. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  4. 【Android RTMP】Android Studio 集成 x264 开源库 ( Ubuntu 交叉编译 | Android Studio 导入函数库 )

    文章目录 安卓直播推流专栏博客总结 一. x264 简介 二. x264 交叉编译 三. Android Studio 导入函数库 四. 交叉编译版本 五. GitHub 项目地址 安卓直播推流专栏博 ...

  5. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  6. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )

    文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...

  7. Android FFmpeg源码编译及在Android studio的集成

    准备工具: 1,ubuntu server 18.04.4(其他发行版服务器或桌面版都行,我这里以ubuntu为例,可以使用虚拟机,也可以使用公网的服务器) 2,ndk R17c linux版 (下载 ...

  8. Android Studio使用OpenCV进行图像基本处理

    Android Studio使用OpenCV进行图像基本处理 1.环境配置 ①进入OpenCV官网下载SDK包 进入官网(https://opencv.org/releases/)选择"An ...

  9. Android studio项目调用SO库

    Android studio项目调用SO库 Android studio创建Native C++工程 下载Native C++工程编译工具 新建native c++工程 native C++工程目录结 ...

最新文章

  1. MySql练习题参考答案
  2. 【OpenCV3】Opencv3.2.0在Hisi3521下的交叉编译和移植
  3. DIV + CSS 神话
  4. backend system available odata service detection
  5. Docker---Run命令
  6. python修改服务器ip,[python+Bat]读表修改机房IP
  7. 91期:2016阿里安全峰会重点资料新鲜开放,不能错过
  8. MySql 1248 - Every derived table must have its own alias
  9. mysql 客户端命令行_强大的工具 MySQL客户端命令行应用技巧
  10. 微信朋友圈评论功能设计实现
  11. Web安全——同源策略理解
  12. 创维电视显示无服务器,常见创维电视机故障及维修方法【详解】
  13. 2020数学建模国赛A题思路与代码(全)
  14. One Day One Step 之 nothing
  15. java swing 聊天表情功能的实现(带完整代码)
  16. 博客园博文爬虫案例效果
  17. 白盒测试——NextDate函数测试(基本路径覆盖法)
  18. Flash 第一章 课堂笔记
  19. python 7周自学计划
  20. VS Code修改语言设置后依旧显示英文的问题解决

热门文章

  1. steam饥荒服务器正在运行旧版本模组,Don’t Starve Together(饥荒)服务器搭建
  2. pycharm 怎么调试html,pycharm怎么调试程序
  3. 阿里Sophix热修复体验
  4. 微信小程序开具发票获取公司抬头
  5. 爆款视频生成器小程序开发及抖音分享接入方案
  6. robotFramework_Jquery语法
  7. PAT(Advanced) 1009 Product of Polynomials(25 分)
  8. python tkinter实现文本编辑器
  9. 中兴通讯5G荣登《财富》2023年中国ESG影响力榜单
  10. Python-Numpy详解