【问题标题】:CIDetector featuresInImage returning 0CIDetector featuresInImage 返回 0
【发布时间】:2018-08-20 20:52:28
【问题描述】:

我正在尝试使用核心检测器获取图像上的文本区域。

- (NSArray *)detectWithImage:(UIImage *)img
{
    // prepare CIImage
    CIImage *image = [CIImage imageWithCGImage:img.CGImage];

    // flip vertically
    CIFilter *filter = [CIFilter filterWithName:@"CIAffineTransform"];
    [filter setValue:image forKey:kCIInputImageKey];
    CGAffineTransform t = CGAffineTransformMakeTranslation(0, CGRectGetHeight(image.extent));
    t = CGAffineTransformScale(t, 1.0, -1.0);
    [filter setValue:[NSValue valueWithCGAffineTransform:t] forKey:kCIInputTransformKey];
    image = filter.outputImage;


    // prepare CIDetector
    CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeText
                                              context:nil
                                              options:@{
                                                        CIDetectorAccuracy: CIDetectorAccuracyHigh}];
    // retrive array of CITextFeature
    NSArray *features = [detector featuresInImage:image
                                          options:@{CIDetectorReturnSubFeatures: @YES}];

    return features;
}

传递的图片是:

我从这张图片中一无所获。我也尝试了彩色图像,也没有翻转图像。

有人能指出我正确的方向吗?

谢谢!

【问题讨论】:

    标签: ios objective-c ios9 core-image cidetector


    【解决方案1】:

    您应该检查以确保传递给您的函数的UIImageimg.CGImage 不是nil,因为您的其余代码似乎没问题,尽管不需要翻转。例如:

    UIImageView *imageView = [[UIImageView alloc] initWithImage: img];
    CIImage *image = [CIImage imageWithCGImage:img.CGImage];
    
    CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeText
                                                  context:nil
                                                  options:@{
                                                            CIDetectorAccuracy: CIDetectorAccuracyHigh}];
    // retrive array of CITextFeature
    NSArray *features = [detector featuresInImage:image options:@{CIDetectorReturnSubFeatures: @YES}];
    
    for(CITextFeature *feature in features) {
        UIView *view = [[UIView alloc] initWithFrame: CGRectMake(feature.bounds.origin.x, image.size.height - fear.bounds.origin.y - feature.bounds.height, fear.bounds.width, feature.bounds.height)];
        view.backgroundColor = [[UIColor redColor] colorWithAlphaComponent: 0.25];
        [imageView addSubview: view];
    }
    

    产生的结果:

    红色高亮表示从CIDetector返回的边界

    【讨论】:

    • 令人惊讶的是,在 iOS 9 模拟器上运行时返回 0。不过,这会在 iOS 11 模拟器上返回正确的值。我想知道为什么会这样,因为文档说 CIDetector 自 iOS 5+ 起可用
    • CIDetectorTypeText 是在 iOS 9 developer.apple.com/documentation/coreimage/cidetectortypetext 中引入的,但如果它没有在模拟器中检测到,那就很奇怪了。
    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 2015-06-21
    • 2016-10-28
    • 2019-02-20
    • 2015-06-17
    • 2012-01-04
    • 2018-02-23
    相关资源
    最近更新 更多