前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图片去霾算法实践】NDK下二维数组的传递

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

作者头像
极客人
发布2018-08-30 15:46:48
4620
发布2018-08-30 15:46:48
举报
文章被收录于专栏:我是极客人我是极客人

最近看到了一篇关于图片“去霾算法”的文章,一下子就有了兴趣,所以想着能不能实现。由于数学能力捉急,无法理解文章的思想和相关论文。于是在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,图片大小稍大时算法耗费的时间和内存过大.

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

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

NDK->C++

ndkArray[mHeight][mWidth]->cppArray[mHeight][mWidth]
代码语言:javascript
复制
    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]
代码语言:javascript
复制
  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;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是极客人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NDK->C++
    • ndkArray[mHeight][mWidth]->cppArray[mHeight][mWidth]
    • C++->NDK
      • cppArray[mHeight][mWidth]->ndkArray[mHeight][mWidth]
      相关产品与服务
      图片处理
      图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档