CoreImage苹果官方给的平句话是。将这些面像图片生成面纹编码保存到数据库被。CoreImage是一个图片分析以及拍卖技术。

 等一下,还有源码下载地址为:http://pan.baidu.com/s/1eQg1qLG

图片 1

接下来去装滤镜的颜色强度,然后经过outputImage将处理后底图输出到result。再然后经过

每当iOS中,可以以
CIDetector类进行人口脸特征辨识,CIDetector是CoreImage框架中的一个表征辨识滤镜,CIDetector主要用以人脸特征辨识,通过外尚可以博眼睛和嘴的性状信息。但是CIDetector不包括面纹编码的领。

let filter = CIFilter(name: "CIGaussianBlur")
print("\(filter.inputKeys)")
// 打印结果:["inputImage", "inputRadius"]
print("\(filter.outputKeys)")
// 打印结果:   ["outputImage"]
print("\(filter. attributes)")
/* 打印结果:
  ["CIAttributeFilterCategories": <__NSArrayI 0x600000057af0>(
        CICategoryBlur,
        CICategoryStillImage,
        CICategoryVideo,
        CICategoryBuiltIn
  )
, "CIAttributeFilterDisplayName": Gaussian Blur, 
  "CIAttributeFilterAvailable_iOS": 6, 
  "inputImage": {
    CIAttributeClass = CIImage;
    CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
    CIAttributeDisplayName = Image;
    CIAttributeType = CIAttributeTypeImage;
},
 "CIAttributeFilterAvailable_Mac": 10.4,
 "CIAttributeReferenceDocumentation": http://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIGaussianBlur, 
"CIAttributeFilterName": CIGaussianBlur, 
"inputRadius": {
    CIAttributeClass = NSNumber;
    CIAttributeDefault = 10;
    CIAttributeDescription = "The radius determines how many pixels are used to create the blur. The larger the radius, the blurrier the result.";
    CIAttributeDisplayName = Radius;
    CIAttributeIdentity = 0;
    CIAttributeMin = 0;
    CIAttributeSliderMax = 100;
    CIAttributeSliderMin = 0;
    CIAttributeType = CIAttributeTypeScalar;
}]
*/

当我们点击相机的时节,我们进入一个录像界面:(图片就非贴出来了)

Core Image 框架是图像处理着深重大的框架。CoreImage
被用来实时地拍卖和分析图像,它能处理来自于Core Graphics、Core Video
和Image I/O等框架的数据类型,并采取CPU和GPU进行渲染。

Processing Image
就是使用滤镜,滤镜是一个图处理算法程序,能够对输入图片进行一个像素点一个诸如素点进行算法上的效果处理,然后生成输出的图纸。Processing
Image
借助的凡<a
name=”fenced-code-block”>CIFilter</a>和<a
name=”fenced-code-block”>CIImage</a>这半单近乎,分别对诺在滤镜输入输出图片
看一下滤镜的根基运用:

//创建旧色滤镜
    sepiaTone= [CIFilter filterWithName:@"CISepiaTone"];

(1)创建滤镜CIFilter对象

(2)设置滤镜参数

(3)输出结果

  • 提供了内建的图纸处理滤镜

接下来看哪调取相机吧:

人脸识别:

  • 有特征辨识能力,比如识别矩形
  • 电动改善图像
  • 链接多个滤镜达到从定义的效用,提供链式滤镜的作用,一个滤镜的出口可以是生一个滤镜的输入
  • 于GPU上创造于定义滤镜的功效
  • 人脸识别的能力(只能识别是匪是面,不具有用脸刷卡的效果)

说实话上面的东西平时利用的有的未是极多,所以自己只是了解了瞬间,如果来动的当儿再次深刻学一下。希望得以吃大家对图像处理有所了解。

(1)CIImage。CoreImage框架中之图像类。

(2)CIContext。上下文对象,所有图像处理还是当一个CIContext中形成的,通过Quartz2D以及OpenGL渲染CIImage对象。

(3)CIFilter。滤镜类包含一个字典结构,对各种滤镜定义了属其各自的习性。

(4)CIDetector。面部识别类,借助于CIFaceFeature可以识别嘴和肉眼的岗位。

CoreImage的职能描述

- (IBAction)faceAction:(id)sender {
    CIContext *context = [CIContext contextWithOptions:nil];
    UIImage *imageInput = _inputImageView.image;
    CIImage *image = [CIImage imageWithCGImage:imageInput.CGImage];
    //设置识别参数; Accuracy代表的是经度。
    NSDictionary *parm = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy];   //设置识别率高点
    //声明一个CIDetector,并设定识别器类型
    CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:context options:parm];

    //取得识别结果
    NSArray *detectResult = [faceDetector featuresInImage:image];

    UIView *resulteView = [[UIView alloc] initWithFrame:_inputImageView.frame];
//    resulteView.backgroundColor = [UIColor redColor];
    [self.view addSubview:resulteView];
    for (CIFaceFeature *faceFeature in detectResult) {
        //脸部
        UIView *faceView = [[UIView alloc] initWithFrame:faceFeature.bounds];
        faceView.layer.borderWidth = 1;
        faceView.layer.borderColor = [UIColor orangeColor].CGColor;
        [resulteView addSubview:faceView];
        //左眼
        if (faceFeature.hasLeftEyePosition) {
            UIView *leftEyeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 5)];
            [leftEyeView setCenter:faceFeature.leftEyePosition];
            leftEyeView.layer.borderWidth = 1;
            leftEyeView.layer.borderColor = [UIColor redColor].CGColor;
            [resulteView addSubview:leftEyeView];
        }

        //右眼
            if (faceFeature.hasRightEyePosition) {
                UIView *rightEyeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 5)];
                [rightEyeView setCenter:faceFeature.rightEyePosition];
                rightEyeView.layer.borderWidth = 1;
                rightEyeView.layer.borderColor = [UIColor redColor].CGColor;
                [resulteView addSubview:rightEyeView];
            }
            //嘴巴
            if (faceFeature.hasMouthPosition) {
                UIView *mouseView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 5)];
                [mouseView setCenter:faceFeature.mouthPosition];
                mouseView.layer.borderWidth = 1;
                mouseView.layer.borderColor = [UIColor redColor].CGColor;
                [resulteView addSubview:mouseView];
            }

    }
    [resulteView setTransform:CGAffineTransformMakeScale(1, -1)];

    if ([detectResult count]>0) {
        CIImage *faceImage = [image imageByCroppingToRect:[[detectResult objectAtIndex:0] bounds]];

        UIImage *face = [UIImage imageWithCGImage:[context createCGImage:faceImage fromRect:faceImage.extent]];

        self.faceImageView.image = face;

        [self.faceButton setTitle:[NSString stringWithFormat:@"识别人脸数:%lu",(unsigned long)[detectResult count]] forState:UIControlStateNormal];
    }
//    resulteView.backgroundColor = [UIColor redColor];
}

图片 2

  • #### 自动改善图像
- (IBAction)takePhotoAction:(id)sender {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        _imagePicker = [[UIImagePickerController alloc] init];
        _imagePicker.delegate = self;
        _imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

        [self presentViewController:_imagePicker animated:YES completion:nil];
    }else {
        NSLog(@"相机不可用");

    }
}

运用滤镜:

CoreImage是一个图分析与处理技术,提供了啊静态图片以及视频接近实时处理的意义,它是iOS的图像处理面临充分主要的框架,要留意她跟CoreGraphics等里的分别,CoreGraphics是召开绘图的,CoreImage可以承受CoreGraphics绘制的图,经过处理,比如滤镜,然后输出。
她能处理来自CoreGraphicsCoreVideoImage
I/O
的框架的数据类型,通过GPU或者CPU进行渲染。
动CoreImage不欲了解OpenGL ES的切切实实细节,也未需要懂得GPU的行事细节

自也是首先涂鸦用这个CIImage,查看转苹果的官API可以看到:它是CoreImage中的一个类目。So,问题来了,什么是CoreImage呢?

图片 3

  • CIRedEyeCorrection: 修复因相机的闪光灯导致的各种红眼

自身经过点击一个按钮触发拖欠事件,然后可以拘留一下怎么落实之。这个好,好好看

(2)获取当前脸面部图片。将面像图片生成面纹编码。

图片 4

 1、首先建立人脸的面纹数据库

(3)用手上的面纹编码和数据库被的面纹编码对比。

运作效果图

1、拍照和朗诵取图库内容

人脸识别一般有三个步骤:

方这事例中采用了滤镜CISepiaTone,这个滤镜能使画面整体偏棕褐色,有硌复古之机能。

高斯模糊的结果如图所示。具体的实现自己耶不介绍了,等用的时刻在认真看吧。

旧色调code

  • #### 高斯歪曲

就是应声没了??也极简单了。不过说的言简意赅:用中文翻译一下就是:

框架中起几个坏重要的切近:

  • CIFaceBalance: 调整肤色
  • CIVibrance: 在无影响肤色的图景下,改善图像的饱和度
  • CIToneCureve: 改善图像的对比度
  • CIHighlightShadowAdjust: 改善黑影细节

简单看一代码:里面来同一句很重要:

图片 5

图片 6

自家这边没有拍卖好原图的标记,其实拍卖好的讲话可以刚好比对五官。

(1)建立人脸的面纹数据库。可以透过照相机或者摄像机采集人脸的面像图片,将这些面像图片生成面纹编码保存至数据库被。

利用Core
Image框架:执行图像加工与视频图像处理。

来拘禁一下CoreImage的职能:

————————就啰嗦到此地拿————————

func autoAjustmentImage() {
        let inputImage = CIImage(image: originalImage)!
        var resultImage: CIImage?
        let filters = inputImage.autoAdjustmentFilters() as [CIFilter]

        for filter: CIFilter in filters {
            filter.setValue(inputImage, forKey: kCIInputImageKey)
            resultImage = filter.outputImage!
        }
        if let result = resultImage {
            imageView.image = UIImage(CIImage: result)
        }
    }

UIImagePickerControllerOriginalImage得到的冲击的像。拿到像后我们便得针对客开展处理了。这里还要记得吃pickerView消失并且将代理置空。

原图

图片 7图片 8

差之CIFilter会有异之参数,如果我们怀念掌握具体的某CIFilter有什么样参数,可以调用它的inputKeys办法,或者调用***
outputKeys*获取其的输出参数列表,我们一般采用它们的参数outputImage,再要调用\*
attributes***博此CIFilter对象的拥有消息:它的名字、所属的归类、输入参数、输出参数、各参数的取值范围和默认值等。
几有的滤镜都来inputImage这个输入参数,系统曾为它预定义了kCIInputImageKey,如果没预定义的,使用字符串。

落了处理后的图样。

运行结果:

#pragma mark - UIImagePickerViewDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage *originImage;
    if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
        originImage = (UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage];
    }else if (picker.sourceType==UIImagePickerControllerSourceTypePhotoLibrary)
    {
        originImage = (UIImage *)[info objectForKey:UIImagePickerControllerEditedImage];

    }
    self.imageView.image = originImage;
    self.imageView.contentMode = UIViewContentModeScaleAspectFit;
    _imagePicker.delegate = nil;
    [self dismissViewControllerAnimated:YES completion:nil];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    _imagePicker.delegate = nil;
    [self dismissViewControllerAnimated:YES completion:nil];
}

使用CIFilter的步骤:

第一个类:CIColor。

 func GaussianBlur() {
        let path = NSBundle.mainBundle().pathForResource("test", ofType: "jpg")!

        let context = CIContext()
        guard let filter = CIFilter(name: "CIGaussianBlur") else {
            return
        }
        filter.setValue(5.0, forKey: "inputRadius")

        let image = CIImage(contentsOfURL: NSURL(fileURLWithPath: path))
        filter.setValue(image, forKey: kCIInputImageKey)
        let result = filter.outputImage!
        let cgImage = context.createCGImage(result, fromRect: result.extent)

        imageView.image = UIImage(CGImage: cgImage!)
    }
- (void)gaosiMohu {
    CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *cImage = [CIImage imageWithCGImage:_imageView.image.CGImage];
    CIImage *result;

    gaussianBlur = [CIFilter filterWithName:@"CIGaussianBlur"];
    [gaussianBlur setValue:cImage forKey:@"inputImage"];
    double value = [_mySlider value];
    value = value*10;

    NSString *text = [[NSString alloc] initWithFormat:@"高斯模糊Radius:%.2f",value];
    _myLabel.text = text;

    [gaussianBlur setValue:[NSNumber numberWithFloat:value] forKey:@"inputRadius"];
    result = [gaussianBlur valueForKey:@"outputImage"];
//    result = [gaussianBlur outputImage]
    CGImageRef imagRef = [context createCGImage:result fromRect:CGRectMake(0, 0, _imageView.image.size.width, _imageView.image.size.height)];

    UIImage *image = [[UIImage alloc] initWithCGImage:imagRef];
    _imageView.image = image;
    CFRelease(imagRef);
    flag = 1;

}
  • 创建CIImage对象

(其中的allowsEditing设置为yes就象征你挑的图片可以编制,默认是No。)

来拘禁同样摆设Apple官方的希冀:

乃可能就此过UIImage,用过CGImage。但是发生没有发因此过CIImage呢???

CoreImage提供了无数种内建的滤镜,提供了于是key-value的样式创建滤镜,
再就是一个滤镜的出口可以是生一个滤镜的输入,这使得我们可以创建各种各样的效益。

——————————————————–说确,具体我还免极端了解,只能先记下了日益了解,因为巧接触CoreImage——————————————————–

图片 9

Perform image processing and video image manipulation with the Core
Image framework.

高斯模糊后的功能图,模糊半径为5.0

图片 10

Snip20161218_4.png

————————开始啰嗦CoreImage了————————

  • 创CIContext上下文,用作画布
  • 创建CIFilter对象
  • 出口滤镜

————————————————–结束了————————————————–

图片 11

@interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate>

CIFilter滤镜的根基运用

2、读取图库内容:直接扣代码。

地方提到了,CoreImage有活动改善图像的意义,根据一个CIImage对象,能够拿走相同组改进图像质量之滤镜,具体可经autoAdjustmentFilters
autoAdjustmentFiltersWithOptions来抱这滤镜数组。
取得的滤镜数组一般是下面就几乎独,大部分状就足足了:

里面来一个Cancel按钮,也就是当自身点击Cancel按钮时会见触发代理方

图片 12

既是都代理了,那把代理方呢勾勒上将。

方的运用了CoreImage内置的高斯模糊滤镜:**
CIGaussianBlur,设置模张冠李戴半径inputRadius**呢5.0。模糊半径越老,最后生成的图像越模糊。

//操作旧色调的方法
- (void)filterSepicTone {
    CIContext *context = [CIContext contextWithOptions:nil];   //创建CIContext对象,它规定了各种选项,包括颜色格式以及内容是否运行在CPU或是GPU上。
    CIImage *cImage = [CIImage imageWithCGImage:_imageView.image.CGImage];
    CIImage *result;

    //创建旧色滤镜
    sepiaTone= [CIFilter filterWithName:@"CISepiaTone"];

    [sepiaTone setValue:cImage forKey:@"inputImage"];

    double value = [_mySlider value];    //获取滑块的值。

    NSString *text = [[NSString alloc] initWithFormat:@"旧色调:%.2f",value];
    _myLabel.text =text;

    [sepiaTone setValue:[NSNumber numberWithFloat:value] forKey:@"inputIntensity"]; //设置旧色滤镜色调强度


    result = [sepiaTone valueForKey:@"outputImage"];   //取得滤镜之后的图像

    CGImageRef imageRef = [context createCGImage:result fromRect:CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height)];

    UIImage *image = [[UIImage alloc] initWithCGImage:imageRef];   //
    _imageView.image = image;

    CFRelease(imageRef);    //释放CGImageRef
    flag = 0;
}

图片 13

外是生育CIImage对象的,典型的就算是,你得经其进行加工图片。让我们看一下操作旧色调的计将。

  • #### Processing Image

立是苹果API中之物。我只是没有改变。可以见见里边来三独枚举类:

CoreImage中之所以到之类似重要发生:CIImage、CIFilter、CIContext (上下文)、
CIDetector (检测)、CIFeature (特征)

CoreImage苹果官方给的同词话是:

先是单依靠的凡图库,第二只因的凡相机,第三独因的是保留相薄。

实则它同上的旧色调差不多,只不过换了瞬间滤镜而已。,让我们看一下效能图:

OK,这会拍摄会就此了咔嚓。就如此简单。

下的哪怕甭说了。不对,还有一个还着重之吗。

人脸识别需要三独步骤:

这里的_mySlider就是自身的一个调值工具。先瞧效果把。

 3、用当下的面纹编码和数据库被之面纹编码进行较对。

 

内的UIImagePickerControllerSourceTYpeCamera其实是一个枚举:里面定义了之类的情节:

3、旧色调

此处我们拿代理置空,然后被该ImagePicketView消失。这样才会回来按钮页面。

————————————————–图像处理便叙这么多吧————————————————–

 2、获取当前总人口脸面像图

 

 

图片 14图片 15

    CGImageRef imageRef = [context createCGImage:result fromRect:CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height)];

    UIImage *image = [[UIImage alloc] initWithCGImage:imageRef];   //

 CIDetector是CoreImage中的一个特色辨识滤镜。它可以找到图片被的总人口脸,但是是谁无法判断,需要数据库。要想识别可以看OpenCV和Face.com。

CIColor包括了那些可用颜色值的颜色值和颜料空间。你见面和任何Core
Image框架中之其它类似混合使用,例如CIFilter,CIContext和CIImage在操作图片是来创造滤镜。

外一个摄方就是因此来当拍摄后点击使用图片那个按钮触发的代办方。里面来个info。这个事物最有因此了,里面都是信息:什么UIImagePickerControllerMediaType、UIImagePickerControllerOriginalImage,还有UIImagePickerControllerMediaMetadata。他们还是键值,然后中间来广大物,你可协调摸索一下中间来甚。我这里经过

————————————————–高端的旧色调和高斯模糊来啦————————————————–

第一我们得用UIImagePickerViewController的类方法isSourceTypeAvailable:方法去看清一下相机是否可用。

此虽是读取图库内容。我们可以发现。只是sourceType改了瞬间。

其余的类似还有:
CIContext/CIDetector/CIFeature/CIFilter等几只。不多,有工夫可看看看。下面的内容中见面提到部分,到老时刻再次解释说明将。

以这边我们就算就此到了CIContext、CIImage、CIFilter了。这几乎单还是CoreImage框架中之好像。其中由关键作用的还是CIFilter,他是滤镜。它的大概介绍如下:

typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
    UIImagePickerControllerSourceTypePhotoLibrary,
    UIImagePickerControllerSourceTypeCamera,
    UIImagePickerControllerSourceTypeSavedPhotosAlbum
};

 

率先我们用在由定义之ViewController中安代理

5、接下去就人脸识别了:

就片独功能的中心就是是UIImagePickerViewController。

左手是原图,右边是老色调的图。(这是自我太欢喜的一个女性明星。可惜因为坐白血病及2015年逝世了。伤心。你永远在在自身之心中。)

下开始上课对图像的拍卖:具体包括摄录、读取图库内容、高斯模糊、旧色调,还有比NB的人脸识别。

 

当自家点击按钮时可识别出人脸的职,然后标记出脸,嘴和眼的岗位。

也就是说我们要想就此是看似,首先我们需要添加UIImagePickerControllerDelegate和UINavigationControllerDelegate协商。这样才能够应用

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    _imagePicker.delegate = nil;
    [self dismissViewControllerAnimated:YES completion:nil];
}

我们看一下实现代码:(据utide讲解自己为绝非尽深刻,就未介绍了)

sourceType:你设置的这souceType就是若调用的花色:包括相机,图库和相薄。

 

始建旧色滤镜。其中的CISepiaTone是免能够改之。还有下边用到的inputImage/outputImage。要咨询怎么?应该是生看似中定义之习性吧。不可知透过艺术调用,只能通过KVC调用了。(不理解对怪,知道之生神请告诉自己瞬间)

这个不多教,你而管其跟UIColor做一个相对而言,内容几乎一样,所以要是您晤面用UIColor就会为此CIColor。但是对类本身介绍一下拿。

4、高斯模糊

此类可以读取iOS设备遭遇之图形以及视频。还得拍。接下来就讲解一下什么落实吧。

嗬是本来色调,旧色调就是将一个图形的水彩变原来。暂时这样理解把。一会出效果好比一下。

- (IBAction)catPhotoFromLibraryAction:(id)sender {
    if(_imagePicker==nil) {
        _imagePicker = [[UIImagePickerController alloc] init];
        _imagePicker.delegate = self;
        _imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;   //提供数据来源
        _imagePicker.allowsEditing = YES;   //允许编辑
        [self presentViewController:_imagePicker animated:YES completion:nil];
    }
}

斯点子吧无用几近说了,应该还能够看懂。

相关文章