首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CVPixelbuffer中的平面是什么?

CVPixelbuffer中的平面是什么?
EN

Stack Overflow用户
提问于 2016-11-01 02:01:52
回答 2查看 2.1K关注 0票数 7

CVPixelBuffer对象中,有一个或多个平面。(参考文献)我们有获得平面的数目,高度,基址的方法。

那飞机到底是什么?以及它是如何在CVPixelBuffer内部构建的

示例:

代码语言:javascript
复制
<CVPixelBuffer 0x1465f8b30 width=1280 height=720 pixelFormat=420v iosurface=0x14a000008 planes=2>
    <Plane 0 width=1280 height=720 bytesPerRow=1280>
    <Plane 1 width=640 height=360 bytesPerRow=1280>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-01 02:23:18

视频格式是一个非常复杂的主题。

有些视频流以字节为单位存储像素RGBA、ARGB、ABGR或其他几个变体(有或没有alpha通道)

(在RGBA格式中,一个像素的红色、绿色、蓝色和alpha值在内存中一个接一个,然后是另一组4个字节,其中包含下一个像素的颜色值,等等)。这是交错的颜色信息。

一些视频流将颜色通道分开,所以所有的红色通道,蓝色,绿色和阿尔法都被作为单独的“平面”发送。如果包含alpha,您将得到一个包含所有红色信息的缓冲区,然后是所有蓝色数据,然后是所有绿色数据,然后是alpha数据。(想想彩色底片,那里有不同的乳胶层来捕捉不同的颜色。乳胶层是颜色信息的平面。这与数字技术是一样的。)

有一些格式,其中颜色数据在一个或两个平面,然后亮度是在一个单独的平面。这就是旧的模拟彩电的工作原理。它从黑白(亮度)开始,然后广播公司添加了边带信号来传递颜色信息。(色度)

我不会经常和CVPixelBuffer混在一起,不知道你想要的是什么血淋淋的细节,我必须投入大量的时间和大量的咖啡,然后我才能“振作”我的大脑,以掌握那些血淋淋的细节。

编辑:

因为您的调试信息显示了两个平面,所以这个像素缓冲区似乎有一个亮度通道和一个色度通道,就像@zeh的答案中提到的那样。

票数 15
EN

Stack Overflow用户

发布于 2020-05-05 08:17:02

尽管现有和被接受的答案在处理CVPixelBuffer时包含了丰富的重要信息,但在这种特殊情况下,答案是错误的。问题所指的两个平面是亮度色度平面。

亮度是指亮度,色度是指颜色-来自奎拉

以下来自Apple的代码片段更加清晰:

代码语言:javascript
复制
let lumaBaseAddress = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0)
let lumaWidth = CVPixelBufferGetWidthOfPlane(pixelBuffer, 0)
let lumaHeight = CVPixelBufferGetHeightOfPlane(pixelBuffer, 0)
let lumaRowBytes = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, 0)

var sourceLumaBuffer = vImage_Buffer(data: lumaBaseAddress,
                                     height: vImagePixelCount(lumaHeight),
                                     width: vImagePixelCount(lumaWidth),
                                     rowBytes: lumaRowBytes)

let chromaBaseAddress = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 1)
let chromaWidth = CVPixelBufferGetWidthOfPlane(pixelBuffer, 1)
let chromaHeight = CVPixelBufferGetHeightOfPlane(pixelBuffer, 1)
let chromaRowBytes = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, 1)

var sourceChromaBuffer = vImage_Buffer(data: chromaBaseAddress,
                                       height: vImagePixelCount(chromaHeight),
                                       width: vImagePixelCount(chromaWidth),
                                       rowBytes: chromaRowBytes)

请参阅完整参考这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40353149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档