ios - 将视频帧的长宽比转换为屏幕尺寸

标签 ios objective-c

我的应用程序使用相机,它会处理每一帧,寻找图像内的一些元素(例如面部)。

当我在图像上找到某些内容时,我想使用自定义 View 的 drawRect:(CGRect)rect 在显示视频的屏幕上进行绘制。

我不只绘制矩形,也不使用 GPU 和 GLKView。 当我以 1920*1080 运行视频帧时,我可以通过将屏幕宽度和高度除以视频帧大小来绘制精确位置。

但是,当我更改为 480*360 视频分辨率时,元素未绘制在正确的位置,我相信这是由于宽高比差异造成的。 知道我需要在这里进行什么转换吗,也许是 AffineTransfrom?

最佳答案

是的。这是由于纵横比造成的。在我的一个项目中,我遇到了类似的问题,我做了以下事情。

  1. 求比例因子

    float xScale = destionation.size.width/imageSize.width;//destination为最大图像绘制区域。

    float yScale = destionation.size.height/imageSize.height;

    浮点比例因子 = xScale < yScale ? x 比例:y 比例;

  2. 通过以下方式找到绘图矩形

    float 目的地高度 = 目的地.尺寸.高度 * 比例因子;

    float 目的地宽度=目的地.尺寸.宽度*缩放因子;

    这将为您提供一个可以按纵横比容纳图像的矩形。并使用这个矩形绘制图像。您还可以通过将中心点乘以比例因子来将该矩形与 View 的中心对齐。

  3. 现在,通过乘以比例因子,将面部矩形从图像大小转换为绘图矩形。

  4. 使用转换后的点在目标矩形上绘制矩形。

关于ios - 将视频帧的长宽比转换为屏幕尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30013063/

相关文章:

ios - 如何根据第一次加载来加载TabBarController或UIViewController

ios - View Controller 和类之间有什么区别

objective-c - Cocoa - 在 NSXMLDocument 中写入 NSXMLElement

ios - UIButton 标题文本颜色

objective-c - 在 iOS 中的多个项目之间共享代码的最佳方式

objective-c - 我怎么知道是否有硬件键盘?

ios - 我可以使用dispatch_io检测给定目录中的文件创建吗?

ios - UITableView 高度变化时更新其他元素的约束

ios - 授权我的应用程序检索联系人会导致它第一次崩溃

ios - 在远程推送通知重定向到正确的 ViewController