ios - AVCaptureVideoPreviewLayer 在 iOS 中添加叠加层和捕捉照片
问题描述
最初的想法是通过 启动相机流AVCaptureSession
,在该 raw 中找到面孔,CMSampleBuffer
然后添加一些图像作为图层AVCaptureVideoPreviewLayer
,然后截取屏幕截图。
完成后,后来发现UIGraphicsGetImageFromCurrentImageContext
无法使用AVCaptureVideoPreviewLayer
,所以截图不能解决我的目的。
所以我使用Metal
andMTKView
来执行一些实时渲染,结果与 CoreImage Filters 和 Metal 的组合很好。我已经知道如何检测面部并使用内置的 CoreImage 过滤器更改面部的那部分,但我找不到合适的方法将图像添加到另一个图像上。
如何在背景图像中的定位方面混合两个图像?我有 CIImage 可以使用。
解决方案
您可以将叠加层加载到 中CIImage
,然后使用transformed(by matrix: CGAffineTransform)
将其移动到面部位置,最后使用composited(over dest: CIImage)
将其混合到CIImage
来自视频缓冲区的 中。您可能需要做一些工作才能在不同的坐标空间之间进行转换。
还有很多更复杂的合成过滤器可用。查看类别中的过滤器。CICategoryCompositeOperation
推荐阅读
- ios - Flutter:XCode 中的存档失败
- javascript - React - 如何从另一个组件更改组件内的状态?
- java - 多个 AWS EC2 实例中的 Tomcat 主要辅助设置
- powershell - 在使用 CreateFile () 创建的 powershell 中调用脚本时出错
- ffmpeg - ffmpeg 循环过滤器无法正常工作
- vue.js - 如何在不展开的情况下将 ref 传递给方法/函数参数?
- excel - 放置在工作表 1 中的 VBA 宏按钮可在隐藏的工作表 2 中运行宏
- pyspark - 如何在 Palantir Foundry 中上传未经身份验证的数据集
- oracle-apex - 登录页面上的分支 (APEX 19.2)
- uicollectionviewcompositionallayout - UICollectionViewCompositionalLayout 和自定义 UICollectionViewCells