【发布时间】:2021-01-24 08:26:06
【问题描述】:
我正在对实时视频流进行一些实时图像分析。我正在使用 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 多倍。有没有更快的替代方案?
【问题讨论】:
-
你为什么不使用 swift 版本? developer.apple.com/documentation/accelerate/…
-
试试
vDSP_vfltu32(histogramY, 2, &histFloatY, 1, 256),其中histFloatY是var。 -
正如问题中提到的,vDSP_vfltu32 是否需要 UInt32 而不是 UInt。首先转换为 UInt32 也同样慢。
标签: ios swift histogram vdsp vimage