Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS可实时确定名片的各个角落_Ios_Image Processing_Crop_Detection_Gpuimage - Fatal编程技术网

iOS可实时确定名片的各个角落

iOS可实时确定名片的各个角落,ios,image-processing,crop,detection,gpuimage,Ios,Image Processing,Crop,Detection,Gpuimage,我想实现一个名片检测功能,比如这个应用()。 相机应检测名片并自动拍照(仅名片) 我的想法是使用BradLarson的GPUImage库,检测角点(使用Harris角点检测算法),用获得的角点计算最大矩形,并裁剪矩形内包含的图像 这是我的密码: - (void)setupFilter { videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 came

我想实现一个名片检测功能,比如这个应用()。 相机应检测名片并自动拍照(仅名片)

我的想法是使用
BradLarson的GPUImage
库,检测角点(使用Harris角点检测算法),用获得的角点计算最大矩形,并裁剪矩形内包含的图像

这是我的密码:

 - (void)setupFilter {
    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];

    filter = [[GPUImageHarrisCornerDetectionFilter alloc] init];
    [(GPUImageHarrisCornerDetectionFilter *)filter setThreshold:0.01f];
    [(GPUImageHarrisCornerDetectionFilter *)filter setSensitivity:0.5f];
    [(GPUImageHarrisCornerDetectionFilter *)filter setBlurRadiusInPixels:2.0f];

    [videoCamera addTarget:filter];
    videoCamera.runBenchmark = YES;
    GPUImageView *filterview = [[GPUImageView alloc] init];
    self.view=filterview;

    GPUImageCrosshairGenerator *crosshairGenerator = [[GPUImageCrosshairGenerator alloc] init];
    crosshairGenerator.crosshairWidth = 22.0;
    [crosshairGenerator forceProcessingAtSize:CGSizeMake(480.0, 640.0)];

    [(GPUImageHarrisCornerDetectionFilter *)filter setCornersDetectedBlock:^(GLfloat* cornerArray, NSUInteger cornersDetected, CMTime frameTime) {
        [crosshairGenerator renderCrosshairsFromArray:cornerArray count:cornersDetected frameTime:frameTime];
    }];

    GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
    [blendFilter forceProcessingAtSize:CGSizeMake(480.0, 640.0)];
    GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc] init];
    [videoCamera addTarget:gammaFilter];
    [gammaFilter addTarget:blendFilter];

    [crosshairGenerator addTarget:blendFilter];
    [blendFilter addTarget:filterview];

    [videoCamera startCameraCapture];

}
问题是我不知道如何调整属性
阈值
敏感性
属性 获取角点(现在我获取图像中所有对象的角点)

我也不知道如何使用这个
GLfloat*cornerArray

我不知道我是否走对了路。。。关于如何实现此功能的其他想法,或者是否存在任何现有库

谢谢

读一下。使用它,您可以检测线条。我建议你们检测直线,然后找到四条彼此近似成直角的直线,取面积最大的矩形

这些步骤将是:

  • 利用Sobel滤波器进行边缘检测
  • Hough变换查找图像中的所有直线
  • 查看所有平行线,然后查看与这些平行线对成90度角的所有线,以找到可能的矩形
  • 选择你最喜欢的矩形。这可以是按区域排列,或者最好与手机对齐,或者要求所有边缘都位于可视摄像头图像内,或者采用其他方法
  • 最后:计算机视觉很难。。。不要期望简单的结果

    补遗
    我应该注意到上面的第3步非常简单,因为直线的角度只是Hough空间的一维。因此,平行线在这个维度上具有相等的值,而正交线将移动pi或90度。

    我不认为有一些objective-c或swift代码示例可用于此?有一个库可用于iOS应用程序。OpenCV还有一个实现。这对你有用吗?这是Brad Larson的。它可以在中使用,并且有一些可用的方法。这是GPUImage代码库上的一个grep,但可能应该构建lib,然后使用适当的文档。您有没有找到用GPUImage实现这一点的方法?