簡體   English   中英

iOS實時確定名片的角落

[英]iOS Determine the corners of a Business Card in realtime

我想實現一個名片檢測功能,如這個應用程序( https://scanbot.io )。 相機應該檢測到一張名片並自動拍照(只有名片)。

圖像由綠線分隔

我的想法是使用BradLarson's 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];

}

問題是我不知道如何調整屬性的thresholdsensibility屬性來獲得角落(現在我正在獲取圖像中所有對象的角落)。

我也不知道如何使用這個GLfloat* cornerArray

我不知道我是否正確的方式...關於如何實現此功能的任何其他想法,還是有任何現有的庫?

謝謝!

閱讀Hough Transform 有了它,你可以檢測線條。 我會敦促你檢測直線,然后發現四條線彼此大致成直角,並采用最大面積的矩形。

步驟將是:

  1. 使用Sobel濾波器進行邊緣檢測。
  2. 霍夫變換找到圖像中的所有直線。
  3. 查看所有平行線,然后查看與這些平行線對成90度的所有線,以找到可能的矩形。
  4. 選擇你最喜歡的矩形。 這可以是按區域,也可以是最好與手機對齊,或者您需要所有邊緣都在可見的攝像機圖像內,或者其他方法。

最后:計算機視覺很難......不要指望輕松的結果。

附錄

我應該注意上面的第3步非常簡單,因為線條所采用的角度只是霍夫空間的一個維度。 因此,平行線在此維度中將具有相等的值,並且正交線將移位pi或90度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM