【问题标题】:CIFaceFeature BoundsCIFace 特征边界
【发布时间】:2016-11-29 10:46:35
【问题描述】:

在使用 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 作为解决方案。这通常是可行的,但对于某些面孔,你会发现它大错特错。

【问题讨论】:

    标签: ios swift uikit core-image


    【解决方案1】:

    首先,删除除以 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。这似乎将框架很好地放在了脸上。这最终成为很多问题的公认答案。

    在我的测试中,我发现这有时会奏效。然而,其他时候,框架会被疯狂地关闭。经过一番思考,我得出了正确的答案。希望这可以解决问题并帮助遇到相同问题的其他人。

    【讨论】:

      猜你喜欢
      • 2020-08-17
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 2019-12-17
      相关资源
      最近更新 更多