我正在使用 Git 存储库中的 GPUImage 将一些过滤器应用于图像。我注意到边缘检测过滤器(我专门使用 CannyEdgeDetectionFilter)在黑色背景上绘制白色边缘。任何人都知道如何在白色背景上制作黑色边缘 - 或另一个可以做到的过滤器(并且不是重量级的,因为这是我需要从该库中获得的唯一过滤器)。
谢谢托尼。
我正在使用 Git 存储库中的 GPUImage 将一些过滤器应用于图像。我注意到边缘检测过滤器(我专门使用 CannyEdgeDetectionFilter)在黑色背景上绘制白色边缘。任何人都知道如何在白色背景上制作黑色边缘 - 或另一个可以做到的过滤器(并且不是重量级的,因为这是我需要从该库中获得的唯一过滤器)。
谢谢托尼。
GPUImageColorInvertFilter 可与 GPUImage 一起使用,并且应该可以满足您的需要。
正如加勒特建议的那样,您可以简单地反转该过滤器的颜色以获得您想要的结果。但是,这将在链中引入另一个过滤器,并可能减慢速度。
您可以使用 GPUImageSketchFilter 获得 Sobel 边缘检测滤波器的倒数。两个过滤器之间的唯一区别是片段着色器的倒数第二行,其中返回的颜色是 1.0 减去边缘强度,而不仅仅是边缘强度。
在这里可以对 Canny 边缘检测执行相同的操作,只是您需要将 GPUImageWeakPixelInclusionFilter 替换为在其着色器中的最后一行具有以下内容的内容:
gl_FragColor = vec4(vec3(1.0 - sumTest * pixelTest), 1.0);
您可以复制并粘贴此过滤器的所有其余代码以及 Canny 边缘检测过滤器的所有代码,然后只需更改 Canny 过滤器以使用您的自定义过滤器类而不是 GPUImageWeakPixelInclusionFilter 并提供您的自定义 Canny 边缘检测你自己的名字。
关于使用 Canny 边缘检测过滤器的一个警告:它执行整个四步 Canny 过程,因此它比 Sobel 边缘检测过滤器使用更多内存要慢得多。您可以使用阈值边缘检测过滤器之一以更低的成本获得 Canny 结果的合理近似值。