如何使用GPUImage检测文档的边缘

时间:2014-03-18 10:02:18

标签: ios iphone gpuimage

我正在创建一个使用Open-CV framework检测文档边缘的应用,但效果并不理想。

我来到这个项目GPUImage。我对此项目一无所知,任何人都可以建议我如何使用GPUImage检测边缘。代码或教程将非常有用。

2 个答案:

答案 0 :(得分:4)

OpenCV 是一个计算机视觉库,可以进行特征检测。如果使用得当,它可以找到边缘并告诉您的应用程序它们在图像中的位置。根据您的问题,这似乎是您所需要的。

GPUImage 是图片过滤库。它将效果应用于图像。它有几个使用边缘检测的滤镜,但它不会告诉你这些边缘在哪里。它将滤镜应用于图像,即它。

你应该坚持使用OpenCV。如果您在获得所需的特征检测结果时遇到问题,那么这将是一个不同的问题。

答案 1 :(得分:3)

我很确定你可以通过GPUImage实现这一目标。例如,看一下FilterShowcase" Harris Corner Detection":

enter image description here

在基础class中,您可以从中获取此代码,您可以拉出坐标:

NSString *const kGPUImageHarrisCornerDetectionFragmentShaderString = SHADER_STRING
( 
 varying highp vec2 textureCoordinate;

 uniform sampler2D inputImageTexture;
 uniform lowp float sensitivity;

 const mediump float harrisConstant = 0.04;

 void main()
 {
     mediump vec3 derivativeElements = texture2D(inputImageTexture, textureCoordinate).rgb;

     mediump float derivativeSum = derivativeElements.x + derivativeElements.y;

     mediump float zElement = (derivativeElements.z * 2.0) - 1.0;

     // R = Ix^2 * Iy^2 - Ixy * Ixy - k * (Ix^2 + Iy^2)^2
     mediump float cornerness = derivativeElements.x * derivativeElements.y - (zElement * zElement) - harrisConstant * derivativeSum * derivativeSum;

     gl_FragColor = vec4(vec3(cornerness * sensitivity), 1.0);
 }
);

如果不是这个,那么你可以尝试一些过滤器。