Ios CIFaceFeature边界

Ios CIFaceFeature边界,ios,swift,uikit,core-image,Ios,Swift,Uikit,Core Image,在使用CIFaceFeature进行人脸检测工作时,我遇到了一个边界问题。当试图在识别出的人脸周围放一个盒子时,框架总是放错位置。关于堆栈溢出的其他问题指出,核心映像和UIKit坐标系是反向的 CoreImage坐标系 UIKit坐标系 (这些图片来自) 显然,这种坐标系差异是帧错位的原因。现在,x轴、宽度和高度保持不变。唯一的区别是y。关于堆栈溢出的其他答案建议使用(图像高度-面y)/2作为解决方案。这通常是有效的,但对于某些人脸,你会发现这是大错特错的 首先,将其除以2。通过执行imag

在使用
CIFaceFeature
进行人脸检测工作时,我遇到了一个边界问题。当试图在识别出的人脸周围放一个盒子时,框架总是放错位置。关于堆栈溢出的其他问题指出,核心映像和UIKit坐标系是反向的

CoreImage坐标系

UIKit坐标系

(这些图片来自)

显然,这种坐标系差异是帧错位的原因。现在,x轴、宽度和高度保持不变。唯一的区别是y。关于堆栈溢出的其他答案建议使用
(图像高度-面y)/2
作为解决方案。这通常是有效的,但对于某些人脸,你会发现这是大错特错的


首先,将其除以2。通过执行
image.size.height-face.bounds.origin.y
设置
origin.y
。你会注意到框架的顶部刚好接触到下巴。我们需要做的就是计算脸部的高度:

image.size.height - face.bounds.height - face.bounds.origin.y
这使您每次都能完美对齐帧

问题依然存在——为什么这些/2答案是错误的?这个坐标问题在2012-2013年左右的堆栈溢出中很流行。人们会用以下代码回答:
image.size.height-face.bounds.origin.y
。如前所述,此框架的顶部接触下巴。沿着这条线的某个地方,有人建议将整个值除以2。这似乎使画面在脸部居中。这最终成为许多问题的公认答案

在我的测试中,我发现这有时是有效的。然而,在其他时候,这个框架会被严重偏离。经过一番思考,我找到了正确的答案。希望这能让事情变得更清楚,并帮助其他有同样问题的人