android - Android 中的 Sobel 边缘检测

标签 android image-processing edge-detection

作为我为 Android 开发的应用程序的一部分,我想向用户展示他们拍摄的图像的边缘检测版本(类似于下面的示例)。

alt text

为了实现这一目标,我一直在研究 Sobel 运算符以及如何在 Java 中实现它。但是,我发现的许多示例都使用了 AWT ( like this example) 中的对象和方法,它们不是 Android 的一部分。

那么我的问题是,Android 是否提供了上述示例中使用的 AWT 功能的替代方案?如果我们仅使用 Android 内置的库重写该示例,我们将如何着手?

最佳答案

问题和答案已有 3 年历史...@reflog 的解决方案适用于边缘检测等简单任务,但速度很慢。

我在 iOS 上使用 GPUImage 进行边缘检测任务。 Android 上有一个等效的库: https://github.com/CyberAgent/android-gpuimage/tree/master

它是硬件加速的,所以它应该非常快。这是 sobel 边缘检测过滤器: https://github.com/CyberAgent/android-gpuimage/blob/master/library/src/jp/co/cyberagent/android/gpuimage/GPUImageSobelEdgeDetection.java

根据文档,您可以简单地执行此操作:

Uri imageUri = ...;
mGPUImage = new GPUImage(this);
mGPUImage.setGLSurfaceView((GLSurfaceView) findViewById(R.id.surfaceView));
mGPUImage.setImage(imageUri); // this loads image on the current thread, should be run in a thread
mGPUImage.setFilter(new GPUImageSobelEdgeDetection());

// Later when image should be saved saved:
mGPUImage.saveToPictures("GPUImage", "ImageWithFilter.jpg", null);

另一种选择是使用 RenderScript,您可以并行访问每个像素并使用它做任何您想做的事情。我还没有看到任何用它构建的图像处理库。

关于android - Android 中的 Sobel 边缘检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2938452/

相关文章:

image-processing - 我应该为高斯噪声选择均值滤波器还是中值滤波器

javascript - 没有通知允许 Android 应用程序使用相机

android - 如何在 Android 中将 bin 文件传输到支持 Alljoyn 的开发板

Android 在运行时将按钮放在 surfaceview 上以捕获图像

c# - 正确执行双三次重采样

python - 可以在Canny Edge框架上显示彩色文本吗?

Android屏幕尺寸数据库

opencv - 如何从图像中捕捉发束结构?

opencv匹配边缘图像

c++ - 围绕精明边缘的结果绘制矩形