我正在使用 CIDetector 在图片中查找人脸。
它返回的人脸坐标是图像文件中的绝对坐标(图像尺寸显然比屏幕尺寸大得多)。
我尝试使用 converRect:toView 命令。图像本身不是 UIView,因此该命令不起作用,我还有一些 View 相互嵌入,最终显示图像。
我想将图像中找到的人脸的边界转换为嵌入图像中屏幕上显示的人脸的确切位置。
如何实现?
谢谢! The image being shown on the phone - the image is scaled to fit the screen with aspect fit
最佳答案
CIDetecter (CoreImage) 的坐标相对于 UIKit 坐标翻转。有很多关于 iOS 人脸检测的教程,但其中大部分要么不完整,要么弄乱了坐标。这是正确的:http://nacho4d-nacho4d.blogspot.com/2012/03/coreimage-and-uikit-coordinates.html
需要注意的一件事:本教程使用小图像,因此生成的坐标不必缩放到图像的屏幕 (UIImageView) 表示形式。假设您使用的是用 iPad 相机拍摄的照片,则必须根据源图像的缩放量来缩放坐标(除非您在运行人脸检测例程之前减小其尺寸——这也许不是个坏主意)。您可能还需要旋转图像以获得正确的方向。
这里的一个答案中有一个旋转/缩放的例程:UIImagePickerController camera preview is portrait in landscape app
这个答案有一个很好的例程,用于在 UIImageView 使用“纵横比”呈现时查找图像的比例:How to get the size of a scaled UIImage in UIImageView?
您需要使用比例尺将 CIDetector 坐标从全尺寸图像映射到 UIImageView 中显示的缩小图像。
关于objective-c - iOS Objective-C 将坐标从绝对图像位置转换为我的 View 坐标系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11921571/