问题标签 [cvpixelbuffer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - DepthData - 获取每像素深度数据(CVPixelBuffer 数据分析)
现在我AVDepthPhotoFilter
从 iPhone7Plus 的立体摄像头运行 Rendering Depth Deta。
所以,我想访问每像素深度数据,但是,我不知道该怎么做。请指教。
ios - 创建宽度倍数为 90 的 CVPixelBuffer 时每行字节错误
我正在处理从网络接收到的原始 yuv420 双平面帧数据,需要创建 CVPixelBuffer 以便将其处理为 Core Image 以及使用 AVAssetWriter 写入磁盘。
当我尝试使用下面的代码创建一个 CVPixelBuffer,宽度为 120、240 或 480 时,它会分配内存并为两个平面创建一个具有正确 bytePerRow 值的正确 CVPixelBuffer(例如,宽度 120 会产生 120 bytePerRow 的值)。
但是,当我输入宽度为 90、180 或 360 的帧时,它会产生错误的 bytePerRow,例如 192 bytePerRow,帧宽度为 180。这会导致稍后在 CoreImage 或 AVAssetWriter 中绘制问题。
请参阅下面的代码来创建 CVPixelBuffer。
请注意,我不能使用 CVPixelBufferCreateWithPlanarBytes,这会迫使我自己分配内存,并在稍后与不是此问题主题的 Core Image 一起使用时导致内存泄漏。
ios - 如何按像素编辑 CMPixelBuffer
我是一名本科生,正在编写一些 HumanSeg iPhone 应用程序。现在我必须从相机读取原始帧,但我发现官方指南中的代码不够清晰,我无法理解。
当我从相机获取帧(CMPixelBuffer
格式)时,我需要对其进行修改(我的意思是我必须进行一些填充和调整大小,并将其转换为CVPixelBuffer
格式,以将其提供给 CoreML MobileNet)。
几周来我一直在寻找解决方案,但不幸的是我什么也没得到。在官方指南中,我被告知这些缓冲区“不提供对内部数据的直接访问”。
我什至尝试使用 aContext
将 a 拉CMPixelBuffer
入 aUIImage
并将其拉回 a CVPixelBuffer
,我发现这个过程非常缓慢,正如官方指南所说的那样。由于我正在做视频处理,这种方法是不可接受的。
我应该做什么或读什么?我真的很感谢你的帮助。
ios - GPUImageRawDataInput 与相机馈送
我的实现可能有几处问题,但我觉得它已经接近了。
我正在尝试使用 GPUImage 记录相机馈送,并设置一个动态叠加层,在视频录制时每秒更新 30 次(或 60 次)。我不希望在录制视频后执行此操作。
在这种情况下,我有一个每秒更新 30 次的像素缓冲区,并且我正在从基地址 ( UnsafeMutablePointer<GLubyte>
) 创建一个 GPUImageRawDataInput 对象。使用 GPUImageRawDataInput 对象,我将它的目标设置为“过滤器”变量,它只是一个 GPUImageFilter()。我不确定这是否是设置它的正确方法。
目前它正在录制的视频只是摄像头,没有覆盖。
floating-point - 如何将 CIImage 渲染到每通道 32 位浮点像素缓冲区中?
我想将 CIImage 渲染到 kCVPixelFormatType_128RGBAFloat 类型的像素缓冲区中。但是 CIContext.render() 没有说“不支持的格式”。我在运行 iOS 11 的 iPhone 7 Plus 上进行了测试。
这是我的代码:
缓冲区创建成功——断言没有触发。只有最后一行的渲染没有说“不支持的格式”。
我还尝试通过将第二个 nil 替换为来创建一个IOSurface 支持的 CVPixelBuffer[kCVPixelBufferIOSurfacePropertiesKey: [:]] as CFDictionary
,但它没有帮助。
我怎样才能让它工作?
格式需要为 kCVPixelFormatType_128RGBAFloat,因为这里太复杂,无法进入,简短的版本是像素值的范围大于 0-255,包括不能四舍五入的小数值。
我尝试了更多的东西:
- kCVPixelFormatType_64ARGB
- 软件渲染器
- 创建由 EAGLContext 支持的CIContext
- 创建由 MTLDevice 支持的CIContext
- 调用 CIContext。创建CGImage ()
- 渲染到 MTLTexture,但我不知道如何创建一个。
- 渲染到 IOSurface
- 在CIContext () 上调用clearCaches ()。
- 调用reclaimResources (),但这在 iOS 上不可用。
- 检查我的输入是 < CIContext. inputImageMaximumSize () 和outputImageMaximumSize ()
- 渲染到原始字节数组。
这些都不起作用。Core Image 不支持渲染到每通道浮点数 32 位还是每通道整数 16 位?
swift - 使用视觉的调度队列中 CVPixelBuffer 的内存泄漏
我在捕获管道中使用渲染器类向视频添加 CI 过滤器。在渲染器的 copyRenderedPixelBuffer 中,我还想复制像素缓冲区并将其发送到 Vision 以检测面部标志。
我为 Vision 制作了一个带有串行调度队列的单例。问题是,一旦我添加了调度队列,pixelBuffer 就不会从内存中释放 - 因此会发生大量泄漏(即使像素缓冲区在 objc 代码中被释放)。随着调度队列的静音,内存泄漏消失了(但是,由于 Vision 功能,视频预览存在大量视频延迟)。
非常感谢任何帮助!
Vision 的 Swift 类
swift - 有没有更快的方法从 Swift 中的 UIImage 创建 CVPixelBuffer?
任务:实时录制视频并应用过滤器
问题从修改后的 UIImage 获取 CVPixelBuffer 太慢
我的相机的输出正在被过滤并直接进入 UIImageView 以便用户可以实时看到效果,即使在不录制视频或拍照时也是如此。我想要一些方法来记录这个不断变化的 UIImage 到视频,所以它不需要像我现在做的那样。目前,我通过将 CVPixelBuffer 附加到assetWriter 来做到这一点,但是由于我将过滤器应用于 UIImage,因此我将 UIImage 转换回缓冲区。我已经测试了使用和不使用 UIImage -> 缓冲区的情况,所以我已经证明这会导致不可接受的减速。
下面是 captureOutput 中的代码,注释清楚发生了什么,以及获取 UIImage 缓冲区的方法:
swift - AVAssetReader 从 copyNextSampleBuffer() 获取像素缓冲区时遇到问题,Swift
我正在尝试使用 macOSX 上的 AVFoundation 和 AVAssetReader 从 Quicktime 电影文件中读取图像帧。我想通过 Metal 中的纹理贴图显示帧。有很多在线使用 AVAssetReader 的示例,但我无法让它为我想要的工作。
我可以从电影中读取基本帧数据——打印输出中的时间值、大小和持续时间看起来正确。但是,当我尝试获取 pixelBuffer 时,CMSampleBufferGetImageBuffer 返回 NULL。
此处已解决此问题(为什么 CMSampleBufferGetImageBuffer 返回 NULL),建议问题是必须在设置参数中指定视频格式而不是“nil”。所以我尝试用上面的“videoReaderSettings”替换“nil”,格式有各种值:kCVPixelFormatType_32BGRA、kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 等。
结果是帧“时间”值仍然正确,但“大小”和“持续时间”值为 0。但是,CMSampleBufferGetImageBuffer 确实返回了一些内容,之前为 0。但屏幕上出现了垃圾。
这是将 pixelBuffer 转换为 Metal 纹理的函数。
当我能够将 pixelBuffer 传递给此函数时,它会报告图像的正确大小。但正如我所说,出现在屏幕上的是垃圾——实际上它是由最近的 Safari 浏览器页面组成的。我不确定问题出在第一个函数还是第二个函数中。CMSampleBufferGetImageBuffer 的非零返回值令人鼓舞,但大小和持续时间的 0 则不是。
我发现这个线程(CMSampleBufferRef 的缓冲区大小)表明大小和持续时间显示 0 可能不是问题,所以问题可能在于转换为金属纹理?
知道我做错了什么吗?
谢谢!
ios - 在某些设备上难以将像素缓冲区写入资产写入器
我正在我的应用程序中开发一个函数,将图像从我的示例缓冲区写入 AVAssetWriter。奇怪的是,这在 10.5" iPad Pro 上运行良好,但在7.9" iPad Mini 2上会导致崩溃。我无法理解相同的代码如何在两个不同的设备上出现问题。但这是我的代码;
我收到newPixelBuffer为零的错误,但同样,仅在 7.9 英寸 iPad 上。iPad Pro 正常运行,没有任何错误。有什么想法吗?谢谢!