ios - CIFace 特征边界

标签 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 作为解决方案。这通常是有效的,但对于某些面孔,您会发现这是完全错误的。

最佳答案

首先,除以 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/

相关文章:

ios - 如何根据 Swift 中元素的 id 从结构数组中删除结构元素?

ios - 当 TextField 显示时获取 UIKeyboard 高度

ios - 在iOS上,有没有办法每秒刷新60帧以上?

ios - 如何调用 SKLabelNode

ios - ERROR ITMS-90034 苹果商店提交 phonegap 错误

ios - 从 Swift 2 中的父 Controller 访问容器 View Controller

ios - 如何根据用户选择为每个 VC 更改导航栏 Controller 颜色?

ios - 结合 OpenGL 和 UIKit Core Graphics 性能

iphone - 带有自定义layoutSubviews的UIScrollView不再有动画

swift - 如何将圆角半径添加到 UIStackView 并屏蔽 subview