美文网首页程序员Android知识Android技术知识
【图片去霾算法实践】NDK下二维数组的传递

【图片去霾算法实践】NDK下二维数组的传递

作者: 极客人 | 来源:发表于2017-01-16 11:31 被阅读860次

最近看到了一篇关于图片“去霾算法”的文章,一下子就有了兴趣,所以想着能不能实现。由于数学能力捉急,无法理解文章的思想和相关论文。于是在Github上找到了相关的Java代码,算法的效果十分明显:

去霾前的图片 去霾算法处理后的图片

不知道是不是算法太复杂,还是Java效率相对较低的缘故,一个3M的JPG图片处理下来需要近20秒的时间。

效果明显的算法让我萌生了开发一款去霾相机的想法,为了获得更快的处理速度,在研究Java去霾算法代码后,我决定将其写成C++代码,然后通过NDK(Android原生开发)移植到Android平台。

项目的基本思想是在Android/Java下获得图片的Bitmap将其像素点转成二维的int二维数组,然后将int二维数组传入JNI层,交给NDK层C++代码处理,NDK层处理完毕后返回去霾后的int二维数组,由Java层转成Bitmap重新显示或保存。

经过一天的奋斗,我终于实现了用C++代码实现“去霾”算法并顺利移植到Android原生开发中。效果已实现,目前还有很多BUG,图片大小稍大时算法耗费的时间和内存过大.

Android 图片去霾

本文预计会写一个系列,后续根据情况可能会开源。如果你对去霾算法实践感兴趣,可以关注我的简书和博客:http://wangbaiyuan.cn ,后续将持续更新

本篇文章介绍NDK和Java层怎样互传二维数组

NDK->C++

ndkArray[mHeight][mWidth]->cppArray[mHeight][mWidth]

    int **cppArray= new int *[mHeight];
  
    for (int i = 0; i < mImageHeight; i++) {
        cppArray[i] = new int[mWidth];
        jintArray intdata = (jintArray) env->GetObjectArrayElement(ndkArray, i);
        cppArray[i] = env->GetIntArrayElements(intdata, 0);
        env->DeleteLocalRef(intdata);//释放内存,防止内存泄漏
        }
    }

C++->NDK

cppArray[mHeight][mWidth]->ndkArray[mHeight][mWidth]

  jobjectArray ndkArray= env->NewObjectArray(mHeight,env->FindClass("[I"),NULL);
    for (int i = 0; i < mHeight; i++) {
        jintArray jintArray= env->NewIntArray(mWidth);
        env->SetIntArrayRegion(jintArray, 0, mWidth, out[i]);
        env->SetObjectArrayElement(ndkArray, i, jintArray);
        env->DeleteLocalRef(jintArray);
    }

    return ndkArray;

相关文章

  • 【图片去霾算法实践】NDK下二维数组的传递

    最近看到了一篇关于图片“去霾算法”的文章,一下子就有了兴趣,所以想着能不能实现。由于数学能力捉急,无法理解文章的思...

  • java学习第九章(数组)

    数组 数组的循环 数字12345倒序打印 二维数组 二维数组的循环 数组找到最大值 数组的排序(冒泡算法) 变量交...

  • 数组

    一维数组的创建及使用二维数组的创建及使用数组的基本操作数组排序算法

  • PHP 常用自定义函数

    获取分页信息 二维数组去重 二维数组合并重复项 二维数组排序 二维数组字母排序

  • 剑指offer4.二维数组中的查找

    题目 题目分析 算法-二维数组中的查找 比如一个二维数组是这样: 要查找数组7在不在数组内,根据前人总结出来的规律...

  • 牛客网高频算法题系列-BM18-二维数组中的查找

    牛客网高频算法题系列-BM18-二维数组中的查找 题目描述 在一个二维数组array中(每个一维数组的长度相同),...

  • 剑指 0ffer 二维数组中的查找

    算法名称:二维数组中的查找 题目内容:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递...

  • 岛屿问题

    岛屿系列题目的核心考点就是用 DFS/BFS 算法遍历二维数组。本文分析DFS算法。 一、框架 因为二维矩阵本质上...

  • 二维指针,数组指针,指针数组及二维数组

    二级指针的作用详解 数组指针和指针数组的区别 参数传递二维数组 原文地址:http://blog.csdn.net...

  • 排列组合问题

    题目 给出一个二维数组,得到所有想要结果的二维数组。比如: 希望得到的结果 再比如: 希望得到的结果: 我的算法:...

网友评论

    本文标题:【图片去霾算法实践】NDK下二维数组的传递

    本文链接:https://www.haomeiwen.com/subject/czqivttx.html