我正在对实时视频流进行一些实时图像分析。我正在使用 vImage 来计算直方图和 vDSP 以进行进一步处理。我有多年来一直运行良好的 Objective-C 代码。我现在要把它转换成 Swift。虽然它有效,但它太慢了。我发现主要问题是将 vImage 直方图(即 UInt (vImagePixelCount))转换为 vDSP 可以处理的浮点数。在 Objective-C 中,我使用 vDSP 进行转换:
err = vImageHistogramCalculation_Planar8(&vBuffY,histogramY, 0);
vDSP_vfltu32((const unsigned int*)histogramY,2,histFloatY,1,256);
但是,vImage 直方图是 UInt,而不是 UInt32,所以我不能在 Swift 中使用 vDSP_vfltu32。相反,我正在使用
let err = vImageHistogramCalculation_Planar8(&vBuffY, &histogramY, 0)
let histFloatY = histogramY.compactMap{ Float($0) }
问题是这段代码比 Objective-C 版本慢了 100 多倍。有没有更快的替代品?