Android、Renderscript、ScriptIntrinsicBlur、导入 libRSSuport.so 和 librsjni.so

Posted

技术标签:

【中文标题】Android、Renderscript、ScriptIntrinsicBlur、导入 libRSSuport.so 和 librsjni.so【英文标题】:Android, Renderscript, ScriptIntrinsicBlur, import libRSSuport.so and librsjni.so 【发布时间】:2015-07-23 13:07:26 【问题描述】:

我正在开发一个使用 Canny 边缘检测的应用程序。这里最耗时的步骤是高斯模糊的初始应用(例如,在 500k 图片上应用 11x11 内核)。为了加快速度,我想使用 renderscript 的 ScriptIntrinsicBlur 方法。我已经在 Eclipse 中设置了代码,包括最新的 BuildTools 22.0.1,如所述,例如在http://developer.android.com/guide/topics/renderscript/compute.html#ide-setup。 renderscrip-v8.jar 的导入工作,编译工作,但我没有设法让它运行,甚至在我的三星 S5 上也没有。该错误与缺少 libRSSupport.so 和 librsjni.so 的导入有关。我阅读了有关该主题的数十个主题,但没有找到解决方案。我正要放弃它...(并考虑使用更小的图片和内核 - 以降低质量为代价)任何帮助将不胜感激!

正如我的旁注:我用 Java 制作了一个原型,在那里使用 java.awt.image.ConvolveOp 进行高斯模糊。这个速度非常快 - 但不幸的是在 Android 中不可用。

【问题讨论】:

你不能使用 OpenCV 来做到这一点吗? Canny 和 GaussianBlur 都是几毫秒 你是对的,Miki,我现在会检查一下。无论如何,我非常同情纯 Java 的实现,因为从我读到的关于 Renderscript 的内容来看,它在某些设备上并不可靠,我不想冒任何问题的风险。从技术上讲,我想知道 openCV 是如何达到这样的速度的。我在 Android 中编写了一个简单的模糊算法,其中包含通过图像像素和内核的嵌套 for 循环,这需要大约 50 mio (11x11x600x800) 的灰度图片乘法和加法,而在我的三星上则需要 1 秒。无论如何,谢谢你的提示 【参考方案1】:

您可以尝试http://android-developers.blogspot.com/2013/09/renderscript-in-android-support-library.html 中的说明吗(除了将工具版本号更新到最新,应该是默认的)?听起来您只是手动将 .jar 添加到项目中,这还不够。此处指定的项目选项可确保将所有组件捆绑为您的 APK 的一部分。

【讨论】:

我已经将这 3 行添加到 Eclipse 中的项目属性中,但这只会创建 renderscript v8.jar 的导入,而不是 libRSSupport.so 和 librsjni.so 库 - 这也是需要的用于运行渲染脚本。我从 LogCat 看到这是问题所在,并且执行在 ScriptIntrinsicBlur.create 语句处停止。另外,我有一些疑问,我是否应该从 Eclipse 更改为 Android Studio,因为 Google 不再支持前者,如果我理解正确的话。 啊,我不知道你在 Eclipse 上。我相信他们总是需要独立指定 .so 库。您可能最好切换到 Android Studio,因为这是唯一受支持的前进路径。 谢谢斯蒂芬。我一定是瞎了眼……直到现在我才意识到Android已经提供了一个GaussBlur函数,名为BlurMaskFilter。这对于我的目的来说绝对足够而且相当快。如果有人有兴趣,我可以在这里发布短代码。 附录.... BlurMaskFilter 只是在图像边缘创建一些模糊。所以这不能用作图像的高斯滤波器。由于我不想使用需要最终用户导入其他库的 Renderscript 或任何其他库(例如 OpenCV),我很高兴找到这篇关于高斯矩阵可分离性的优秀文章:@987654322 @。我完全忘记了 Gauss-Kernel 的这个不错的特性,它本质上将计算工作量从 n^2 减少到 2n。我现在实现了。 只是作为更新。在尝试了 100 种其他没有为高斯模糊带来所需速度的方法后,我终于从 Eclipse 迁移到了 Android Studio。我必须承认,我相当怀疑。但是……难以置信!在第一次尝试中,Renderscript 没有任何问题!它的速度非常棒。非常开心!!!

以上是关于Android、Renderscript、ScriptIntrinsicBlur、导入 libRSSuport.so 和 librsjni.so的主要内容,如果未能解决你的问题,请参考以下文章

RenderScript在Android 6上崩溃

Android RenderScript+ScriptIntrinsicBlur 或 RenderEffect(android 12) 实现 图片模糊效果

Android RenderScript+ScriptIntrinsicBlur 或 RenderEffect(android 12) 实现 图片模糊效果

Android、Renderscript、ScriptIntrinsicBlur、导入 libRSSuport.so 和 librsjni.so

Android Renderscript 字符串函数?

iOS和Windows Phone的Android Renderscript等效于什么?