2016-07-25 2 views
1

CIFaceFeatureで顔検出を行っているうちに、境界に問題がありました。認識された顔の周囲にボックスを配置しようとしている間、フレームは常に誤った配置になります。 Stack Overflowに関する他の質問は、Core ImageとUIKitの座標系が逆転していることを指摘しています。CIFaceFeatureBounds

CoreImageが

システムを(これらの画像は、https://nacho4d-nacho4d.blogspot.com/2012/03/coreimage-and-uikit-coordinates.htmlからのものである)

明らか座標

UIKitの座標系、この座標系の差は、フレーム置き忘れ理由は。今、x軸、幅、および高さは同じままです。唯一の違いはyです。スタックオーバーフローに関する他の答えは、解決策として(image height - face y)/2を提案します。これは一般的には機能しますが、一部の顔では、それが間違っていることがわかります。

答えて

1

まず、image.size.height - face.bounds.origin.yを行うことによって、2セットの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で割ることを示唆しました。それは、フレームをフレーム上でかなり中心に置いているようでした。それはかなりの質問で受け入れられた答えになってしまった。

私のテストでは、これが時々動作することがわかりました。しかし、他の時代には、枠が大きく外れていました。ちょっとした思考をした後、私は正しい答えを得ました。うまくいけば、これは物事をまっすぐにして、同じ問題を抱えている人を助ける。