中爲不同通道工作我正在嘗試計算kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange圖像緩衝區中Y通道的直方圖。當我使用vImageHistogramCalculation_Planar8時,我只傳遞一個參考值到一個直方圖。直方圖如何在vImageHistogramCalculation_Planar8
如何知道使用哪個通道創建直方圖?如果我想閱讀所有頻道,我該怎麼辦?
也可以對代碼示例進行批判。
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))
}
}