gpt4 book ai didi

ios - 直方图如何针对 vImageHistogramCalculation_Planar8 中的不同 channel 工作

转载 作者:搜寻专家 更新时间:2023-10-31 22:41:34 24 4
gpt4 key购买 nike

我正在尝试计算 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 图像缓冲区中 Y channel 的直方图。当我使用 vImageHistogramCalculation_Planar8 时,我只传入对单个直方图的引用。

我如何知道哪个 channel 用于创建直方图?如果我想阅读所有 channel ,我该怎么办?

也欢迎对代码示例的批评。

extension ViewController: AVCaptureVideoDataOutputSampleBufferDelegate {
func captureOutput(_ captureOutput: AVCaptureOutput!,
didOutputSampleBuffer sampleBuffer: CMSampleBuffer!,
from connection: AVCaptureConnection!) {

let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
CVPixelBufferLockBaseAddress(imageBuffer, CVPixelBufferLockFlags(rawValue: 0))

let height = CVPixelBufferGetHeight(imageBuffer)
let width = CVPixelBufferGetWidth(imageBuffer)
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer)
let pixelBuffer = CVPixelBufferGetBaseAddress(imageBuffer)

// let format = CVPixelBufferGetPixelFormatType(imageBuffer)
// print("format: \(format)")

///kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange = '420v'

var vBuffer = vImage_Buffer()
vBuffer.data = pixelBuffer
vBuffer.rowBytes = bytesPerRow
vBuffer.width = vImagePixelCount(width)
vBuffer.height = vImagePixelCount(height)

let luma = [UInt](repeating: 0, count: 256)

let lumaHist = UnsafeMutablePointer<vImagePixelCount>(mutating: luma)

vImageHistogramCalculation_Planar8(&vBuffer, lumaHist, UInt32(kvImageNoFlags))

CVPixelBufferUnlockBaseAddress(imageBuffer, CVPixelBufferLockFlags(rawValue: 0))
}
}

最佳答案

kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 是一种平面格式,所有平面都编码到缓冲区中。而 vImage 平面函数一次只能在一个平面上工作。上面的代码正在计算三个平面上的直方图,但被视为一个大平面,这可能不是您想要的。

可以使用以下函数访问 Y 平面的基地址和每行字节数:

let bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(imageBuffer, 0)
let pixelBuffer = CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0)

平面索引取决于缓冲区格式。这个名字通常会给你一个提示。这里是 YpCbCr,所以 Y 平面应该是第一个,在索引 0 处。

关于ios - 直方图如何针对 vImageHistogramCalculation_Planar8 中的不同 channel 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45474081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com