RenderScript高斯模糊等与图片处理/计算机视觉-Android

> RenderScript

Google 官方RenderScript- https://developer.android.com/guide/topics/renderscript/compute

  RenderScript在3.0引入,而一些内置的compute kernel在JELLY_BEAN_MR1中引入,为了在低版本手机中使用这些特性,我们不得不引入renderscript_v8兼容包。

高斯模糊效果实现方案及性能对比- https://blog.csdn.net/huli870715/article/details/39378349
Android StackBlur高斯模糊- https://github.com/kikoso/android-stackblur
Android中滤镜使用OpenGL和RenderScript处理图片- https://github.com/liweiping1314521/RiemannCamera/

  OpenCV库来进行滤镜和图片的处理。处理每一帧的图片,OpenGL和RenderScript脚本处理的相当快,它们的运算都是使用GPU去渲染的,而OpenCV的处理速度取决于CPU的执行速度。

  RenderScript(并行计算技术)是运行在Android系统上的一个高性能密集计算框架。RenderScript主要面向并行数据的计算,当然也可以使串行数据计算的负载受益。RenderScript运行时会在一台设备所有可用处理器上并行工作,比如多核的CPU,GPU或者DSP,这使得你可以专注于算法,而不是任务调度或者负载平衡。RenderScript在应用程序执行图像处理,计算摄影或者计算机视觉等方面都非常有用。 
RenderScript两个很重要的概念是需要了解的:
 高性能的计算内核是通过衍生自C99的语言编写的。
 有专用的Java API用于管理RenderScript的资源生命周期以及控制内核的执行。

opencl 和Renderscript总结- https://www.cnblogs.com/zsychanpin/p/7040566.html
  在android上要开发opencl。手机端要有libopencl.so文件(也就是opencl驱动)。可是如今android手机端非常少有这个文件。原因是尽管AMD、Intel、NVIDIA、苹果等支持opencl,可是google好像不太支持opencl。在移动端,google有RenderScript(渲染脚本。也是基于异构计算的思想实现的API,长处是跨平台性好,适合各种android操作系统,可是性能比opencl稍差点)。

因此大部分android手机支持RenderScript,却非常少有支持opencl的。

RenderScript demo- https://github.com/desaco1989/Fun_Sobel_RenderScript_Filter

RenderScript Demo- https://github.com/CoXier/RenderScript

Android使用Sobel算法提取图片轮廓- https://github.com/zl-leaf/GraphicLib 

--- eclipse的project.properties加上:
renderscript.target=18
renderscript.support.mode=true
--- Studio Gradle 加上:
android{
  defaultConfig{
renderscriptTargetApi 18
        renderscriptSupportModeEnabled true
  }
}
> 1.RenderScript实现高斯模糊 ScriptIntrinsicBlur类,大致就是将图片实现高斯模糊。
为了防止出现有的机型兼容问题,最好将renderscript-v8.jar
/**
 * 高斯模糊
 * @param bitmap src
 * @param radius the radius of blur ,max is 25
 * @param context
 * @return a blur bitmap
 */
public static Bitmap blurBitmap(Bitmap bitmap, float radius, Context context) {
    //Create renderscript
    RenderScript rs = RenderScript.create(context);
    //Create allocation from Bitmap
    Allocation allocation = Allocation.createFromBitmap(rs, bitmap);
    Type t = allocation.getType();
    //Create allocation with the same type
    Allocation blurredAllocation = Allocation.createTyped(rs, t);
    //Create blur script
    ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    //Set blur radius (maximum 25.0)
    blurScript.setRadius(radius);
    //Set input for script
    blurScript.setInput(allocation);
    //Call script for output allocation
    blurScript.forEach(blurredAllocation);
    //Copy script result into bitmap
    blurredAllocation.copyTo(bitmap);
    //Destroy everything to free memory
    allocation.destroy();
    blurredAllocation.destroy();
    blurScript.destroy();
    t.destroy();
    rs.destroy();
    return bitmap;
}
2.Magnifier Image,实现放大镜效果
3.Sketch Image实现素描效果,处理的算法很简单:

求RGB平均值Avg = (R + G + B) / 3,如果Avg >= 100,则新的颜色值为R=G=B=255;如果Avg < 100,则新的颜色值为R=G=B=0;255就是白色,0就是黑色;至于为什么用100作比较,这是一个经验值吧,设置为128也可以,可以根据效果来调整。

> RenderScript与OpenGL Shader
using RenderScript for graphical purposes。a graphics library such as OpenGL。
renderscript-v8.jar:android.support.v8.renderscript.Allocation;android.support.v8.renderscript.RenderScript;
  RenderScript是Android平台的一种类C的高性能编程语言,用于3D渲染和处理密集型计算。
  RenderScript高斯模糊,对图像像素点的每一行中的每一点做水平方向的均值滤波操作。对图像数据的处理。在实际应用中RenderScript常常被用作图层的3D或者2D的图形渲染。比如像现在Android中的动态壁纸大部分使用的方法都是使用RS来进行图形的渲染达到的。
  RenderScript在机器上进行第一遍编译,然后在目标设备上进行最后一遍编译(Just-In-TimeCompiling),因而带来更高效的原生二进制代码。这也就是意味着,凡是支持RenderScript的设备都可以运行你的代码。不用管什么架构。
  着色器(Shader)是用来实现图像渲染的 用来代替固定渲染管线的可编辑程序。

  openGL 1.1不支持shader语言,2.0支持;图形变换或者特效有shader language的支持可以大幅提升性能。
  renderscript available on a device, such as multi-core CPUs and GPUs. ,类c脚本引擎,被google收购了。RenderScript is especially useful for applications performing image processing, computational photography, or computer vision.可以写一些耗计算或者渲染3d图形的脚本,它本身也调用底层opengl接口??,因此和上层的java opengles接口功能上有些重复,在android运用的实践中已经证明比java程序的性能要好。一般用来辅助支持现有的java程序,它能和java主程序通信。树叶动态壁纸就是运用renderscript的例子。

> 图像处理:
  RenderScript是Android系统中能高效处理大量计算任务的框架,特别适用一些需要处理图片和加载图片以及 计算机视觉的方面应用。RenderScript是Adnroid3.0引进的.Renderscript是用C99(C的一种标准)实现的。轮廓提取算法是Sobel边缘检测。
Android自动手绘,圆你儿时画家梦- https://blog.csdn.net/huachao1001/article/details/51518322

猜你喜欢

转载自blog.csdn.net/shareus/article/details/80182523