它能管理来自,1.框架介绍

您只怕用过UIImage,用过CGImage。可是有未有用过CIImage呢???

CoreImage是叁个图形深入分析和拍卖才干,提供了为静态图片和录制周围实时管理的效用,它是iOS的图像管理中比较重大的框架,要留心它与CoreGraphics等之间的界别,CoreGraphics是做绘图的,CoreImage还可以CoreGraphics绘制的图形,经过管理,举个例子滤镜,然后输出。
它能管理来自CoreGraphicsCoreVideoImage
I/O
的框架的数据类型,通过GPU恐怕CPU进行渲染。
应用CoreImage无需明白OpenGL ES的切实细节,也没有须要知道GPU的办事细节

自己也是率先次用这些CIImage,查看一下苹果的官方API能够看来:它是CoreImage中的一个类目。So,问题来了,什么是CoreImage呢?

在iOS应用中,有一类应用深受广大妹纸们的重申,那就是美图类应用。大家都心爱得舍不得放手在自拍后给照片加三个滤镜效果,让照片看起来尤其有“文化艺术范”。在iOS内置框架中,为大家提供了一套十三分拉长的滤镜效果。

710官方网站 1

CoreImage苹果官方给的一句话是:

滤镜:->给图像增添效果

介绍:1.框架介绍

1)CoreImage

(2)是三个图像框架 它依照OpenGL顶层成立 底层则用着色器来拍卖图像

(3)它使用了GPU基于硬件加快来管理图像

(4)CoreImage中有为数相当多滤镜

(5)它们能够三回给予一张图像只怕录像帧各样视觉效果 -> 滤镜链

(6)并且滤镜能够连接起来组成贰个滤镜链 把滤镜效果叠合起来处理图像

2.类的牵线

1.CIImage:保存图像数据的类 CGImageRef->图像中的数据

2.CIFilter:滤镜类 图片属性进行细节管理的类 它对全数的像素进行操效能键-值(KVC)来设置

3.CIContext:上下文是落实对图像处理的有血有肉目标->滤镜对象输出的图像并不是合成之后的图像  必要利用图像管理的上下文 
合併 输出的图像

3.成效介绍 100+效果能够经过attributes查找供给安装的参数内容

按效果与利益分类:

kCICategoryDistortionEffect 扭曲成效,比方bump、旋转、hole

kCICategory吉优metryAdjustment 几何开着调节,比方仿射调换、平切、透视转变

kCICategoryCompositeOperation 合併,比方源覆盖(source
over)、最小化、源在顶(source atop)、色彩混合形式

kCICategoryHalftoneEffect Halftone效果,比如screen、line screen、hatched

kCICategoryColorAdjustment 色越调节,譬喻伽马调解、白点调节、暴光

kCICategoryColorEffect 色彩效果,譬喻色调调解、posterize

kCICategoryTransition 图像间转移,举个例子dissolve、disintegrate with
mask、swipe

kCICategoryTileEffect 瓦片效果,比方parallelogram、triangle

kCICategoryGenerator 图像生成器,比如stripes、constant
color、checkerboard

kCICategoryGradient 渐变,举例轴向渐变、仿射渐变、高斯渐变

kCICategoryStylize 风格化,比方像素化、水晶化

710官方网站,kCICategorySharpen 锐化、发光

kCICategoryBlur 模糊,比如高斯模糊、主题模糊、运动模糊

按使用境况分类:

kCICategoryStillImage 用于静态图像

kCICategoryVideo 用于录制

kCICategoryInterlaced 用于交错图像

kCICategoryNonSquarePixels 用于非矩形像素

kCICategoryHighDynamicRange 用于HDR

使用:

1⃣️查询效用分类里面 的功用 filterNamesInCategory:<#(nullable
NSString *)#>

CoreImage的成效描述

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

2⃣️使用手续:

来看一张Apple官方的图:

就那没了??也太轻松了。可是说的切中时弊:用普通话翻译一下正是:

1.实例CIImage ->首先把UIImage ->CHImageRef ->CIImage

710官方网站 2

运用Core
Image框架:实行图像加工和录制图像管理。

2.创办CIFilter滤镜并给滤镜设置属性 属性通过kvc 来安装

Snip20161218_4.png

————————开端啰嗦CoreImage了————————

3.创建CIContext上下文  合并

来看一下CoreImage的职能:

第4个类:CIColor。

4.合併绿净输出的图像

  • 提供了内建的图片管理滤镜

以此不多疏解,你可把它和UIColor做叁个相对来讲,内容大致一模二样,所以只要您会用UIColor就能用CIColor。不过对类本人介绍一下把。

5.赋给UIImageView对象出示

  • 一对表征辨识本领,比方识别矩形
  • 机动更始图像
  • 链接多个滤镜达到自定义的功用,提供链式滤镜的法力,二个滤镜的输出能够是下叁个滤镜的输入
  • 在GPU上创制自定义滤镜的成效
  • 人脸识别的技能(只可以识别是或不是颜面,不辜负有用脸刷卡的效率)

CIColor包含了那二个可用颜色值的颜色值和颜色空间。你会和任何Core
Image框架中的其余类混合使用,例如CIFilter,CIContext和CIImage在操作图片是来创设滤镜。

6.若是想行使滤镜链 能够重复叠合效果

CoreImage提供了比较多种内建的滤镜,提供了用key-value的款型成立滤镜,
再正是一个滤镜的输出能够是下贰个滤镜的输入,那使得大家得以成立精彩纷呈的功力。

其余的类还可能有:
CIContext/CIDetector/CIFeature/CIFilter等几个。非常少,一时光足以看看看。上边包车型地铁剧情中会涉及部分,到充裕时候再解释表明把。

代码呈现:

CoreImage中用到的类首要有:CIImage、CIFilter、CIContext (上下文)、
CIDetector (检查评定)、CIFeature (特征)

————————就啰嗦到这里把————————

第一利用滤镜设置图片效果,需求创造多个imageView 

imageView = [[UIImageView alloc]initWithFrame:self.view.frame];

imageView.contentMode =UIViewContentModeScaleAspectFit;

[self.view addSubview:imageView];

  • #### Processing Image

上面初始上课对图像的管理:具体包罗拍片、读取图库内容、高斯模糊、旧色调,还会有相比较NB的人脸识别。

七个开关选拔本地手提式无线话机内部的图纸相册:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button.frame = CGRectMake(100, 100, 80, 40);

[button setTitle:@”PHOTO” forState:UIControlStateNormal];

button.backgroundColor = [UIColor brownColor];

[button addTarget:self action:@selector(choosePic)
forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button];

Processing Image
就是应用滤镜,滤镜是四个图形管理算法程序,能够对输入图片张开贰个像素点一个像素点进行算法上的效能处理,然后生成输出的图片。Processing
Image
依附的是<a
name=”fenced-code-block”>CIFilter</a>和<a
name=”fenced-code-block”>CIImage</a>那八个类,分别对应着滤镜输入输出图片
看一下滤镜的根基运用:

1、拍照和读取图库内容

在此间只是单纯的一片段成效 所以只是加上三个按键展现效果:

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];

button1.frame = CGRectMake(100, 150, 80, 40);

[button1 setTitle:@”Filter” forState:UIControlStateNormal];

button1.backgroundColor = [UIColor brownColor];

[button1 addTarget:self action:@selector(addColorFilter)
forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button1];

使用CIFilter的步骤:

那四个成效的宗旨便是UIImagePickerViewController。

调用本地相册的办法:

-(void)choosePic{    UIImagePickerController *picker =
[[UIImagePickerController alloc]init];    picker.delegate = self;   
[self presentViewController:picker animated:YES completion:nil];     
  }//采纳完图片调用-
(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary*)info{

  • 创建CIImage对象

此类能够读取iOS设备中的图片以及录像。还足以拍照。接下来就讲授一下什么样落实啊。

//获得选中的图像

UIImage *chooseImage= info[UIImagePickerControllerOriginalImage];

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

首先大家供给在自定义的ViewController中设置代理

//展现在视图控件上

imageView.image = chooseImage;

不等的CIFilter会有两样的参数,假诺我们想清楚具体的某部CIFilter有哪些参数,能够调用它的inputKeys主意,可能调用***
outputKeys*获取它的出口参数列表,大家一般接纳它的参数outputImage,再只怕调用\*
attributes***获取那几个CIFilter对象的兼具新闻:它的名字、所属的分类、输入参数、输出参数、各参数的取值范围以及暗许值等。
差非常少具备的滤镜皆有inputImage那几个输入参数,系统现已为它预订义了kCIInputImageKey,若无预约义的,使用字符串。

@interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate>

//让相册页面消失

[self dismissViewControllerAnimated:YES completion:nil];

NSLog(@”%@”,info);

}

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;
}]
*/

也正是说大家只要想用这些类,首先大家供给增添UIImagePickerControllerDelegate和UINavigationControllerDelegate商业事务。那样工夫动用

设置滤镜属性需求的关键步骤和艺术:

710官方网站 3

下一场看怎么样调取相机吧:

//增加源图片

CIImage *inputImage = [CIImage
imageWithCGImage:imageView.image.CGImage];

CIFilter滤镜的基础运用

- (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(@"相机不可用");

    }
}

//创设三个滤镜

CIFilter *filter =[CIFilter filterWithName:@”CIColorMonochrome”];

运营结果:

笔者经过点击一个开关触发该事件,然后能够看一下怎么落到实处的。这一个轻巧,好雅观看

//设置滤镜的品质

[filter setValue:inputImage forKey:kCIInputImageKey];

710官方网站 4

先是我们须要用UIImagePickerViewController的类方法isSourceTypeAvailable:方法去剖断一下照相机是还是不是可用。

//设置滤镜的颜料

[filter setValue:[CIColor colorWithRed:1.0 green:0.5 blue:0.6
alpha:1] forKey:kCIInputColorKey];

原图

内部的UIImagePickerControllerSourceTYpeCamera其实是三个枚举:里面定义了如下的内容:

//查询滤镜里面包车型大巴习性

NSLog(@”%@”,filter.attributes);

// NSLog(@”%@”,[CIFilter
filterNamesInCategory:kCICategoryColorEffect]);

CIImage *outputImage =filter.outputImage;

710官方网站 5

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

//成立CIContext上下文 合併源图片和滤镜

CIContext *context =[CIContext contextWithOptions:nil];

运营效果图

那是苹果API中的东西。笔者可未有改观。能够看出里边有多少个枚举类:

//合併滤镜输出的图像

CGImageRef imageRef = [context createCGImage:outputImage
fromRect:outputImage.extent];

地方这些例子中央银行使了滤镜CISepiaTone,那么些滤镜能使画面全部偏中灰色,有一些复古的功用。

先是个指的是图库,第3个指的是相机,第三个指的是保留相薄。

//赋给UIImageView对象出示

imageView.image =[UIImage imageWithCGImage:imageRef];

  • #### 高斯歪曲

下边包车型客车就毫无说了。不对,还应该有一个更关键的吗。

注释:

sourceType:你设置的这一个souceType正是你调用的种类:包罗相机,图库和相薄。

1.查询 效果分类中 包涵哪些成效:filterNamesInCategory:

 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!)
    }

既是都代理了,那把代理方法也写上去把。

(1)按住command 点击CIFilter 步入接口文件 找到第128行-148行全是 效果分类

上面的施用了CoreImage内置的高斯模糊滤镜:**
CIGaussianBlur,设置模模糊半径inputRadius**为5.0。模糊半径越大,最毕生成的图像越模糊。

#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];
}

(2)采纳其中某三个分类 NSLog -> [CIFilter filterNamesInCategory:刚才拷贝的归类]; -> 打印出来的 是这些分类包涵的持有 效果  -> 拷贝选取中间的某三个意义

710官方网站 6

 

2.查询 使用的法力中 能够设置什么样性质(KVC) attributes

高斯模糊之后的作用图,模糊半径为5.0

 

NSLog -> [CIFilter filterWithName:刚才拷贝采取中间的某二个效应].attributes ->获得这几个滤镜全数能够安装的个性

  • #### 自动革新图像

当大家点击相机的时候,我们进来二个拍戏分界面:(图片就不贴出来了)

上边提到过,CoreImage有自动改正图像的职能,依据三个CIImage对象,能够获得一组创新图像品质的滤镜,具体能够透过autoAdjustmentFilters
autoAdjustmentFiltersWithOptions来博取那个滤镜数组。
赢得的滤镜数组一般是上边那多少个,超过十分之五气象已经够用了:

内部有四个Cancel按键,也正是当本身点击Cancel开关时会触发代理方法

  • CIRedEyeCorrection: 修复因相机的闪光灯导致的各类红眼
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    _imagePicker.delegate = nil;
    [self dismissViewControllerAnimated:YES completion:nil];
}
  • CIFaceBalance: 调整肤色
  • CIVibrance: 在不影响肤色的景观下,革新图像的饱和度
  • CIToneCureve: 改进图像的对比度
  • CIHighlightShadowAdjust: 改善黑影细节

此地我们把代理置空,然后让该ImagePicketView消失。那样才干回来开关页面。

另多个代理方法正是用来当拍录后点击使用图片这个按键触发的代理方法。里面有个info。这么些事物太有用了,里面都以音信:什么UIImagePickerControllerMediaType、UIImagePickerControllerOriginalImage,还恐怕有UIImagePickerControllerMediaMetadata。他们都以键值,然后中间有成都百货上千东西,你能够自身试一下里面有甚。小编这里透过

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消失而且把代理置空。

OK,那会留影会用了吧。就这么轻巧。

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

- (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];
    }
}

这边正是读取图库内容。大家得以窥见。只是sourceType改了须臾间。

(当中的allowsEditing设置为yes就表示你采用的图样能够编写制定,私下认可是No。)

这么些方法也不用多说了,应该都能看懂。

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

3、旧色调

什么样是旧色调,旧色调便是把三个图片的颜色变旧。近来那样敞亮把。一会出去效果能够对照一下。

在此地大家就用到了CIContext、CIImage、CIFilter了。那多少个都以CoreImage框架中的类。个中起关键效率的依然CIFilter,他是滤镜。它的简要介绍如下:

她是生育CIImage对象的,标准的正是,你能够经过它进行加工图片。让大家看一下操作旧色调的措施把。

//操作旧色调的方法
- (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;
}

这里的_mySlider只是自家的二个调值工具。先看看效果把。

710官方网站 7710官方网站 8

侧面是原图,左侧是旧色调的图。(那是作者最心爱的三个女明星。可惜因为因为白血病与二〇一六年过逝了。哀痛。你永久活在作者的心灵。)

轻松看一代码:里面有一句相当重要:

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

创建旧色滤镜。当中的CISepiaTone是不可能退换的。还会有上边用到的inputImage/outputImage。要问何故?应该是那三个类中定义的个性吧。不能够通过措施调用,只可以通过KVC调用了。(不知道对不对,知道的大神请告诉自个儿须臾间)

下一场去设置滤镜的色泽强度,然后通过outputImage将管理后的图纸输出到result。再然后透过

    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];   //

获得了拍卖后的图片。

——————————————————–说真的,具体作者还不太掌握,只好先记下了逐月精通,因为刚刚接触CoreImage——————————————————–

4、高斯模糊

- (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;

}

事实上它和下边包车型地铁旧色调大约,只然则换了一晃滤镜而已。,让大家看一下功力图:

710官方网站 9710官方网站 10

高斯模糊的结果如图所示。具体的完毕自己也不介绍了,等选取的时候在认真看看吧。

 

5、接下去正是人脸识别了:

人脸识别供给多个步骤:

 1、首先创制人脸的面纹数据库

 2、获取当前人脸面像图片

 3、用当下的面纹编码与数据库中的面纹编码举行比对。

 CIDetector是CoreImage中的八个风味辨识滤镜。它能够找到图片中的人脸,然而是哪个人不能够判定,需求数据库。要想识别能够看OpenCV和Face.com。

咱俩看一下实当代码:(据utide疏解本身也没太深入,就不介绍了)

- (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];
}

当本人点击按键时方可辨别出人脸的地方,然后标志出脸,嘴和肉眼的岗位。

710官方网站 11

本身那边没有拍卖好原图的旗号,其实拍卖好的话可以刚好比对五官。

 

————————————————–图像管理就讲这么多吗————————————————–

说实话上边的事物平日利用的片段不是太多,所以作者只是精晓了须臾间,即使有利用的时候再深切学习一下。希望得以让我们对图像管理有所明白。

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

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

 

 

相关文章