我希望能实现类似于这个应用(https://scanbot.io)的名片检测功能。相机应该可以检测到名片并自动拍摄名片照片(仅限名片)。
我的想法是使用
这是我的代码:
问题在于我不知道如何调整
我也不知道如何使用这个
我不知道我是否正确...对于如何实现这个功能或是否存在任何现有库,有没有其他想法?
谢谢!
我的想法是使用
BradLarson的GPUImage
库,检测角落(使用哈里斯角检测算法),计算出带有获得角落最大的矩形,并裁剪矩形内包含的图像。这是我的代码:
- (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];
}
问题在于我不知道如何调整
threshold
和sensibility
属性,以获取角落(现在我正在获取图像中所有对象的角落)。我也不知道如何使用这个
GLfloat* cornerArray
。我不知道我是否正确...对于如何实现这个功能或是否存在任何现有库,有没有其他想法?
谢谢!