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

问题描述 投票:3回答:1

我正在使用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 image 2.过滤的sobelEdgeDetection / GPUImageCannyEdgeDetectionFilter image enter image description here 2. enter image description here 我正在使用钢笔工具绘画颜色。如果我在着色时在圆圈内着色,它应该不会从圆边界出来,直到我选择另一个接触点。 基于触摸点,我想在封闭的边界内对其进行着色。

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

我该怎么办?

ios swift4 gpuimage
1个回答
3
投票

嘿Pradip你正在寻找洪水填充算法准确它将解决你的问题。

Floodfill算法简要说明 -

泛洪填充算法采用三个参数:起始节点,目标颜色和替换颜色。该算法查找阵列中通过目标颜色的路径连接到起始节点的所有节点,并将它们更改为替换颜色。

您的研发链接以及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,只是为了删除背景颜色,并在上面找到了非常有用的链接。希望能帮助到你
© www.soinside.com 2019 - 2024. All rights reserved.