4

CIDetector を使用して、画像内の顔を検出しています。

返される顔の座標は、画像ファイル内の絶対座標です (画像のサイズは明らかに画面サイズよりもはるかに大きくなっています)。

converRect:toView コマンドを使用しようとしました。画像自体はUIViewではないため、コマンドは機能しません。また、最終的に画像が表示されるいくつかのビューが互いに埋め込まれています。

画像内で見つかった顔の境界を、埋め込み画像の画面に表示されている顔の正確な位置に変換したいと考えています。

これはどのように達成できますか?

ありがとう! スマートフォンに表示されている画像 - 画像はアスペクト フィットで画面に合わせて拡大縮小されています

4

1 に答える 1

8

CIDetecter(CoreImage)からの座標は、UIKit座標に対して反転されます。iOSの顔検出に関するチュートリアルはたくさんありますが、それらのほとんどは不完全であるか、座標を台無しにしています。正しいものは次のとおりです:http://nacho4d-nacho4d.blogspot.com/2012/03/coreimage-and-uikit-coordinates.html

注意すべき点の1つは、チュートリアルでは小さな画像を使用しているため、結果の座標を画像の画面上の(UIImageView)表現に拡大縮小する必要がないことです。iPadカメラで撮影した写真を使用する場合、元の画像を拡大縮小する量だけ座標を拡大縮小する必要があります(顔検出ルーチンを実行する前にサイズを縮小しない限り、悪い考えではないかもしれません)。また、正しい向きにするために画像を回転させる必要がある場合もあります。

回転/スケーリングのためのここでの答えの1つにルーチンがあります:UIImagePickerControllerカメラプレビューは風景アプリのポートレートです

そして、この答えは、「アスペクトフィット」を使用してUIImageViewによって提示されたときに画像のスケールを見つけるための良いルーチンを持っています:UIImageViewでスケーリングされたUIImageのサイズを取得する方法は?

CIDetectorの座標をフルサイズの画像からUIImageViewに表示される縮小された画像にマッピングするには、縮尺を使用する必要があります。

于 2012-08-12T14:43:47.190 に答える