CIFaceFeature Bounds

时间:2016-07-25 23:18:57

标签: ios swift uikit core-image

在使用CIFaceFeature进行面部检测时,我遇到了边界问题。当试图在识别出的脸部周围放置一个盒子时,框架总是放错地方。 Stack Overflow上的其他问题指出Core Image和UIKit坐标系是倒置的。

CoreImage坐标系

UIKit坐标系

(这些图片来自https://nacho4d-nacho4d.blogspot.com/2012/03/coreimage-and-uikit-coordinates.html

显然,这种坐标系差异是帧错位的原因。现在,x轴,宽度和高度保持不变。唯一的区别是y。 Stack Overflow上的其他答案建议使用(image height - face y) / 2作为解决方案。这通常有效,但对于某些人来说,你会发现它是非常错误的。

1 个答案:

答案 0 :(得分:2)

首先,将除以2除去。通过origin.y设置image.size.height - face.bounds.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.这似乎使得框架在脸上很好地居中。这最终成为了很多问题的接受答案。

在我的测试中,我发现这有时会起作用。然而,其他时候,框架将大幅度脱落。做了一点思考后,我找到了正确的答案。希望这能使事情顺利进行,并帮助其他有同样问题的人。