边缘检测在整个图像的特定帧中

时间:2016-10-13 21:46:12

标签: ios image-processing gpuimage

我正在使用项目 GPUImage 中的GPUImageSobelEdgeDetectionFilter进行边缘检测。

我的要求是我想要检测图像中的边缘,但只能检测200 x 200的中心边框,并且不应触摸图像的其余部分。

框架中没有直接api为边缘检测坐标提供CGRect。我确实有一种替代方法,可以裁剪原始图像并将其传递给边缘检测,最后对原始图像进行超强处理。但这听起来像是对我的黑客攻击。

知道是否有直接的方法吗?

2 个答案:

答案 0 :(得分:0)

只有你这样做的方法是做裁剪并使用裁剪后的图像。

答案 1 :(得分:0)

如果您愿意切换到较新的GPUImage 2,这是该版本框架的核心新功能之一。过滤器可以部分应用于图像的任何区域,使图像的其余部分保持不变。这包括Sobel边缘检测,并且可以使用任意形状完成图像的遮罩:

Partial Sobel edge detection

要部分应用Sobel边缘检测滤波器,您可以正常设置滤波器链,然后为滤波器设置掩码。在下面,掩码是一个圆圈,生成的匹配480x640图像:

let circleGenerator = CircleGenerator(size:Size(width:480, height:640))
edgeDetectionFilter.mask = circleGenerator
circleGenerator.renderCircleOfRadius(0.25, center:Position.center, circleColor:Color.white, backgroundColor:Color.transparent)

圆圈内的区域将应用​​滤镜,外部区域将直接穿过前一个像素颜色。

这使用模板蒙版来执行此部分渲染,因此它不会减慢渲染速度。不幸的是,我几乎停止了我对GPUImage的Objective-C版本的工作,所以这不会被反向移植到该旧版本的框架。