我正在使用 CIDetector 在图片中查找人脸。
它返回的人脸坐标是图像文件中的绝对坐标(图像尺寸明显大于屏幕尺寸)。
我尝试使用 converRect:toView 命令。图像本身不是 UIView,因此该命令不起作用,而且我还有一些相互嵌入的视图,最终显示图像。
我想将图像中找到的人脸的边界转换为嵌入图像中屏幕上显示的人脸的确切位置。
如何实现?
我正在使用 CIDetector 在图片中查找人脸。
它返回的人脸坐标是图像文件中的绝对坐标(图像尺寸明显大于屏幕尺寸)。
我尝试使用 converRect:toView 命令。图像本身不是 UIView,因此该命令不起作用,而且我还有一些相互嵌入的视图,最终显示图像。
我想将图像中找到的人脸的边界转换为嵌入图像中屏幕上显示的人脸的确切位置。
如何实现?
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 使用“aspect fit”呈现时找到图像的比例:How to get the size of a scaled UIImage in UIImageView?
您需要使用比例来将 CIDetector 坐标从全尺寸图像映射到 UIImageView 中显示的缩小图像。