ios - 如何使用 ios swift 中的 sobel 边缘检测/canny 边缘检测在有限的边缘边界内使用钢笔工具为我的草图着色?

标签 ios swift4 gpuimage

我正在使用 GPUImage 检测边缘并应用 GPUImageSobelEdgeDetectionFilter 或 GPUImageCannyEdgeDetectionFilter 。现在我的要求是:

我怎样才能从该图像中获取坐标点,以便我可以在封闭边界内进行绘图。

检测图像的边缘

   var image_p: GPUImagePicture?
   var filterImageview: UIImageView! // to display images

   let inputImage = filterImageview.image
    if let anImage = inputImage {
        image_p = GPUImagePicture(image: anImage)
    }

    let filter1 = GPUImageSobelEdgeDetectionFilter()//GPUImageCannyEdgeDetectionFilter()
    image_p?.addTarget(filter1)
    image_p?.processImage()

    let outputImage = filter1.imageFromCurrentlyProcessedOutput()
    filterImageview.image = outputImage

现在我正在尝试检测这些点,以便我可以创建一个单独的图层用于在封闭边界内绘图。

  • 例如 1. orgnl 图像 2. 过滤后的 sobelEdgeDetection/GPUImageCannyEdgeDetectionFilter 图像

    1. enter image description here 2. enter image description here

    我正在使用钢笔工具绘制颜色。 如果我在着色时在圆圈内着色,在我选择另一个接触点之前,它不应该从圆圈边界出来..

    基于触摸点,我想在封闭边界内为其着色。

我也试过Floodfill算法。它给出了不同的输出。不完全是我想要的输出。

我该如何应用它?

最佳答案

嘿 Pradip,您正在寻找 floodfill 算法,确切地说,它可以解决您的问题。

Floodfill算法简要说明-

flood-fill 算法采用三个参数:起始节点、目标颜色和替换颜色。该算法查找数组中所有通过目标颜色路径连接到起始节点的节点,并将它们更改为替换颜色。

研发链接和 objective-c 演示。

  1. https://ilearnios.wordpress.com/2013/07/18/scanline-flood-fill-algorithm-with-or-without-tolerance-in-objective-c/
  2. https://lodev.org/cgtutor/floodfill.html
  3. https://github.com/Chintan-Dave/UIImageScanlineFloodfill (伟大的演示礼貌 Chintan-Dave)

    我还在我的项目中使用了 floodfill 只是为了删除背景颜色并发现上面的链接非常有用。 希望对你有帮助

关于ios - 如何使用 ios swift 中的 sobel 边缘检测/canny 边缘检测在有限的边缘边界内使用钢笔工具为我的草图着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52553432/

相关文章:

ios - 如何在Swift 4的ARKit中实现实时相机滤镜?

ios - GPUImage + Touch 模糊效果

ios - "The native class hasn' t been loading"错误与我的绑定(bind)

ios - 使用导航栏和 UITextField 时出现问题

ios - 从图像选择器返回后恢复状态

ios - 在 UITableView 中显示可用的蓝牙列表

ios - 负加速度和正加速度究竟代表什么? ( iOS )

ios - 仅适用于 iPhone x 的 AVPlayer 全屏问题

xcode - 无法推断通用参数 'Self' (swift 4)

iOS:GPUImage 库和 VBO