我正在使用项目 GPUImage 中的GPUImageSobelEdgeDetectionFilter
进行边缘检测。
我的要求是我想要检测图像中的边缘,但只能检测200 x 200的中心边框,并且不应触摸图像的其余部分。
框架中没有直接api为边缘检测坐标提供CGRect
。我确实有一种替代方法,可以裁剪原始图像并将其传递给边缘检测,最后对原始图像进行超强处理。但这听起来像是对我的黑客攻击。
知道是否有直接的方法吗?
答案 0 :(得分:0)
只有你这样做的方法是做裁剪并使用裁剪后的图像。
答案 1 :(得分:0)
如果您愿意切换到较新的GPUImage 2,这是该版本框架的核心新功能之一。过滤器可以部分应用于图像的任何区域,使图像的其余部分保持不变。这包括Sobel边缘检测,并且可以使用任意形状完成图像的遮罩:
要部分应用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版本的工作,所以这不会被反向移植到该旧版本的框架。