在使用 CIFaceFeature
进行人脸检测时,我遇到了边界问题。当试图在识别出的脸部周围放置一个框时,框总是会错位。 Stack Overflow 上的其他问题指出 Core Image 和 UIKit 坐标系是倒置的。
(这些图片来自https://nacho4d-nacho4d.blogspot.com/2012/03/coreimage-and-uikit-coordinates.html)
显然,这种坐标系差异就是导致框架错位的原因。现在,x 轴、宽度和高度保持不变。唯一的区别是 y。 Stack Overflow 上的其他答案建议使用 (image height - face 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 年左右在 Stack Overflow 上很流行。人们会用以下代码回答:image.size.height -face.bounds.origin.y
。正如我们之前讨论的,该框架的顶部接触下巴。沿着这条线的某个地方,有人建议将整个值除以 2。这似乎使框架很好地位于脸部中心。这最终成为很多问题的公认答案。
在我的测试中,我发现这有时有效。然而,其他时候,框架会严重偏离。经过一番思考,我得出了正确的答案。希望这能解决问题并帮助其他有同样问题的人。
关于ios - CIFace 特征边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38578821/