gpt4 book ai didi

ios - 如何将图像居中于面部?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:24 24 4
gpt4 key购买 nike

我想从图像中检测人脸并将其居中。我能怎么做 ?我有一张这样的照片:enter image description here

我只想显示脸,就像这张照片:

enter image description here

最佳答案

这远远超出了单个问题的范围,但是除非您要自己编写自己的面部检测算法,否则我建议使用 Apple 的原生类 CIDetector

示例代码:

CIContext *context = [CIContext contextWithOptions:nil];                    // 1

NSDictionary *opts = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh }; // 2

CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace

context:context

options:opts]; // 3



opts = @{ CIDetectorImageOrientation :

[[myImage properties] valueForKey:kCGImagePropertyOrientation] }; // 4

NSArray *features = [detector featuresInImage:myImage options:opts]; // 5

1 创建上下文;在此示例中,是 iOS 的上下文。您可以使用处理图像中描述的任何上下文创建函数。)您还可以选择在创建检测器时提供 nil 而不是上下文。)

2 创建一个选项字典来指定检测器的精度。您可以指定低精度或高精度。低精度(CIDetectorAccuracyLow)速度快;此示例中显示的高精度是彻底但速度较慢。

3 创建人脸检测器。您可以创建的唯一类型的检测器是用于人脸的检测器。

4 设置用于查找面孔的选项字典。重要的是要让 Core Image 知道图像方向,这样检测器才能知道在哪里可以找到直立的人脸。大多数情况下,您将从图像本身读取图像方向,然后将该值提供给选项字典。

5 使用检测器查找图像中的特征。您提供的图像必须是 CIImage 对象。 Core Image 返回一个 CIFeature 对象数组,每个对象代表图像中的一张脸。

面部特征包括:

left and right eye positions

mouth position

tracking ID and tracking frame count which Core Image uses to follow a face in a video segment

从 CIDetector 对象中获取面部特征数组后,您可以遍历该数组以检查每个面部的边界和面部中的每个特征

for (CIFaceFeature *f in features)

{

NSLog(NSStringFromRect(f.bounds));



if (f.hasLeftEyePosition)

NSLog("Left eye %g %g", f.leftEyePosition.x. f.leftEyePosition.y);



if (f.hasRightEyePosition)

NSLog("Right eye %g %g", f.rightEyePosition.x. f.rightEyePosition.y);



if (f.hasmouthPosition)

NSLog("Mouth %g %g", f.mouthPosition.x. f.mouthPosition.y);

}

检测到人脸后,您可以使用标准的 UIKit/CoreImage 类进行缩放和居中。

关于ios - 如何将图像居中于面部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30122658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com