Objective c 红眼矫正

Objective c 红眼矫正,objective-c,filter,face-detection,Objective C,Filter,Face Detection,为了增加红眼矫正效果,我点击了以下链接: 通过吊舱安装在库上方。在我的类中添加了以下代码 UIImage *redEyeImage = [UIImage imageNamed:@"Userimage"]; if (redEyeImage) { UIImage *newRemovedRedEyeImage = [redEyeImage redEyeCorrection]; if (newRemovedRedEyeImage) { imgView.image =

为了增加红眼矫正效果,我点击了以下链接:

通过吊舱安装在库上方。在我的类中添加了以下代码

UIImage *redEyeImage = [UIImage imageNamed:@"Userimage"];

if (redEyeImage) {
    UIImage *newRemovedRedEyeImage = [redEyeImage redEyeCorrection];
    if (newRemovedRedEyeImage) {
        imgView.image = newRemovedRedEyeImage;
    }
}
但我没有得到所需的输出。我有什么遗漏吗?或者是否有其他库来实现这个概念。请建议


谢谢

您可以在两条if语句之后的行上设置断点,然后运行应用程序,查看它们是否被命中(可能
redeyimage
不存在,或者
newremovedeyimage
不存在)

另一种简单的检查方法是:

UIImage *redEyeImage;
UIImage *newRemovedRedEyeImage;

redEyeImage = [UIImage imageNamed:@"Userimage"];

if (redEyeImage) {
    newRemovedRedEyeImage = [redEyeImage redEyeCorrection];
    if (newRemovedRedEyeImage) {
        imgView.image = newRemovedRedEyeImage;
    }
}

NSLog(@"redEyeImage: %@", (redEyeImage != nil ? @"exists" : @"nil"));
NSLog(@"newRemovedRedEyeImage: %@", (newRemovedRedEyeImage != nil ? @"exists" : @"nil"));

然后运行此程序,查看底部的两个日志打印内容。

您可以在两个if语句之后的行上设置断点,然后运行应用程序,查看它们是否被击中(可能
redeyimage
不存在或
newremovedeyimage
不存在)

另一种简单的检查方法是:

UIImage *redEyeImage;
UIImage *newRemovedRedEyeImage;

redEyeImage = [UIImage imageNamed:@"Userimage"];

if (redEyeImage) {
    newRemovedRedEyeImage = [redEyeImage redEyeCorrection];
    if (newRemovedRedEyeImage) {
        imgView.image = newRemovedRedEyeImage;
    }
}

NSLog(@"redEyeImage: %@", (redEyeImage != nil ? @"exists" : @"nil"));
NSLog(@"newRemovedRedEyeImage: %@", (newRemovedRedEyeImage != nil ? @"exists" : @"nil"));

然后运行此命令,查看底部的两个日志打印的内容。

最后,我用以下代码解决了此问题:

UIImage *img = [UIImage imageNamed:@"images.png"];
CIImage *image = [[CIImage alloc]initWithImage:img];
NSLog(@"after ciimage: %@", kCIImageAutoAdjustEnhance);
NSDictionary *options = [NSDictionary dictionaryWithObject:@"NO" forKey:kCIImageAutoAdjustEnhance];
NSLog(@"options: %@", options);
NSArray *adjustments = [image autoAdjustmentFiltersWithOptions:options];
NSLog(@"adjustments: %@  ", adjustments);

for (CIFilter * filter in adjustments)
{
    [filter setValue:image forKey:kCIInputImageKey];
    image = filter.outputImage;
}
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgImage = [context createCGImage:image fromRect:image.extent];
UIImage *enhancedImage = [[UIImage alloc] initWithCGImage:cgImage];
CGImageRelease(cgImage);
self.img.image = enhancedImage;

最后,我用以下代码解决了这个问题:

UIImage *img = [UIImage imageNamed:@"images.png"];
CIImage *image = [[CIImage alloc]initWithImage:img];
NSLog(@"after ciimage: %@", kCIImageAutoAdjustEnhance);
NSDictionary *options = [NSDictionary dictionaryWithObject:@"NO" forKey:kCIImageAutoAdjustEnhance];
NSLog(@"options: %@", options);
NSArray *adjustments = [image autoAdjustmentFiltersWithOptions:options];
NSLog(@"adjustments: %@  ", adjustments);

for (CIFilter * filter in adjustments)
{
    [filter setValue:image forKey:kCIInputImageKey];
    image = filter.outputImage;
}
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgImage = [context createCGImage:image fromRect:image.extent];
UIImage *enhancedImage = [[UIImage alloc] initWithCGImage:cgImage];
CGImageRelease(cgImage);
self.img.image = enhancedImage;

你确定键入的图像名称正确吗?你能告诉我if语句是否执行了吗?是的,if语句正在执行。但结果保持不变。你确定键入的图像名称正确吗?你能告诉我if语句是否执行了吗?是的,if语句正在执行。但结果仍然是一样的相同的