【问题标题】:Why is this array always empty? [closed]为什么这个数组总是空的? [关闭]
【发布时间】:2013-04-01 16:27:27
【问题描述】:

我试图弄清楚如何从用户的相机胶卷中获取图像并对其运行一些核心图像操作(检测面部)。我能够成功地将图像加载到 uiimageview 中,但由于某种原因,我无法使用该图像来使用核心图像检测人脸。有问题的数组是代码的最后一位,这个数组应该包含 CIFaceFeatures,但它一直是空的。我尝试使用不同的图像,但仍然无法正常工作。有什么想法吗?

-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self dismissViewControllerAnimated:YES completion:nil];
UIImage *image =  [info valueForKey:@"UIImagePickerControllerOriginalImage"];
self.facePicture.image = image;

CIImage* image = [CIImage imageWithCGImage:self.facePicture.image.CGImage];

CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace
                                          context:nil options:[NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]];

NSArray* features = [detector featuresInImage:image]; //***features array is empty
NSLog(@"array count is %i",features.count); //returns 0
//Code continues with face detection stuff

}

【问题讨论】:

    标签: ios objective-c cocoa-touch uiimagepickercontroller core-image


    【解决方案1】:

    尝试更改以下行

    UIImage *image =  [info valueForKey:@"UIImagePickerControllerOriginalImage"];
    

    到:

    UIImage *image =  [info objectForKey:UIImagePickerControllerOriginalImage];
    

    重要的部分是从使用@"UIImagePickerControllerOriginalImage" 更改为使用UIImagePickerControllerOriginalImage。原因是UIImagePickerControllerOriginalImage 声明如下:

    extern NSString *const UIImagePickerControllerOriginalImage;
    

    在 Apple 的实际实现文件中的其他地方,UIImagePickerControllerOriginalImage 的实际定义是这样的:

    NSString *const UIImagePickerControllerOriginalImage = @"someStringLiteral";
    

    Apple 选择使用的实际字符串字面值可以是任何值,并且不一定必须与变量的名称相同。通过调用[info objectForKey:@"UIImagePickerControllerOriginalImage"],您基本上是在假设UIImagePickerControllerOriginalImage 实际上是@"UIImagePickerControllerOriginalImage",但不一定是这种情况。

    我假设原始行导致返回值nil,这意味着没有为键@"UIImagePickerControllerOriginalImage" 找到对象。如果imagenil,则其余代码基本上将“静默失败”。如果您按照代码进行操作,则基本上等同于执行以下操作:

    self.facePicture.image = nil;
    
    CIImage* image = [CIImage imageWithCGImage:NULL]; // likely returns nil
    
    NSArray* features = [detector featuresInImage:nil]; //***features array is empty
    NSLog(@"array count is %i", features.count); //returns 0
    

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2012-06-05
      • 2014-04-23
      • 2017-12-13
      • 2013-08-12
      • 1970-01-01
      相关资源
      最近更新 更多