从CVPixelBuffer最有效和快速地获得5种主要颜色



我正试图从CVPixelBuffer中获得5个主要/主要颜色,我需要它尽可能快速高效。

我试过用CIFilter &调整它的大小,然后通过像素数据,但还是相当慢。

另外,我应该如何管理关于线程管理的任务流?

使用CVPixelBuffer的任何提示都将是伟大的!

这是一个K-Means问题,Core Image提供了一个过滤器来解决它!下面的代码创建了CIImage中五种主色的5x1CGImage:

import CoreImage
import CoreImage.CIFilterBuiltins
let ciImage = CIImage(cvImageBuffer: /* your image buffer */)
let filter = CIFilter.kMeans()
filter.count = 5
filter.inputImage = ciImage
let context = CIContext()
if let output = filter.outputImage,
let palette = context.createCGImage(output, from: output.extent) {

// palette is a 5 x 1 `CGImage` that contains the five dominant colors
}