【问题标题】:CoreImage coordinate systemCoreImage坐标系
【发布时间】:2015-04-30 12:24:04
【问题描述】:

我有来自AVAssetCVPixelBufferRef。我正在尝试对其应用CIFilter。我使用这些行:

CVPixelBufferRef pixelBuffer = ...
CVPixelBufferRef newPixelBuffer = // empty pixel buffer to fill
CIContex *context = // CIContext created from EAGLContext
CGAffineTransform preferredTransform = // AVAsset track preferred transform
CIImage *phase1 = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CIImage *phase2 = [phase1 imageByApplyingTransform:preferredTransform];
CIImage *phase3 = [self applyFiltersToImage:phase2];

[context render:phase3 toCVPixelBuffer:newPixelBuffer bounds:phase3.extent colorSpace:CGColorSpaceCreateDeviceRGB()];

不幸的是,我得到的结果方向不正确。例如,以纵向模式拍摄的视频是上下颠倒的。我猜问题出在从AVAssetCoreImage 坐标系(在XCode 中显示phase2 的预览也会显示不正确的结果)。如何解决?

【问题讨论】:

  • 您有没有想过如何修复纵向视频的方向?我也看到了同样的情况,不知道是否只是需要设置一个设置
  • 那是前一段时间,所以我不记得确切,但我想我像你在回答中所做的那样对转换进行了硬编码。

标签: ios transformation core-image coordinate-systems cifilter


【解决方案1】:

我通过这样做解决了它,它应该将所有内容正确定位到坐标空间

var preferredTransform = inst.preferredTransform
preferredTransform.b *= -1
preferredTransform.c *= -1

var outputImage = CIImage(cvPixelBuffer: videoFrameBuffer)
                    .applying(preferredTransform)
outputImage = outputImage.applying(CGAffineTransform(translationX: -outputImage.extent.origin.x, y: -outputImage.extent.origin.y))

【讨论】:

  • 嗨乔恩,为什么需要翻译?在许多源帧上执行此操作时会导致性能问题吗? (例如过滤视频)
  • 您好,我认为它不会对性能造成巨大影响,因为您总是会使用preferredTransform。当我实现它时,我没有注意到我的应用中有任何东西。
  • 嗨乔恩!应用正确的变换,然后缩放 CIImage,导致图像以拉伸的方式呈现(对于纵向视频)。你知道我能做些什么来解决这个问题吗?
  • 感谢乔恩的工作回答,您是否有机会详细说明这究竟是做什么的,是否有更扩展的版本,我们可以在其中了解这一点以及为什么会首先发生这种情况? ?
猜你喜欢
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2014-10-20
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多