【发布时间】:2015-02-26 10:03:17
【问题描述】:
我一直在使用 OpenCV 和 Apple 的 Accelerate 框架,发现 Accelerate 的性能很慢并且 Apple 的文档有限。举个例子:
void equalizeHistogram(const cv::Mat &planar8Image, cv::Mat &equalizedImage)
{
cv::Size size = planar8Image.size();
vImage_Buffer planarImageBuffer = {
.width = static_cast<vImagePixelCount>(size.width),
.height = static_cast<vImagePixelCount>(size.height),
.rowBytes = planar8Image.step,
.data = planar8Image.data
};
vImage_Buffer equalizedImageBuffer = {
.width = static_cast<vImagePixelCount>(size.width),
.height = static_cast<vImagePixelCount>(size.height),
.rowBytes = equalizedImage.step,
.data = equalizedImage.data
};
TIME_START(VIMAGE_EQUALIZE_HISTOGRAM);
vImage_Error error = vImageEqualization_Planar8(&planarImageBuffer, &equalizedImageBuffer, kvImageNoFlags);
TIME_END(VIMAGE_EQUALIZE_HISTOGRAM);
if (error != kvImageNoError) {
NSLog(@"%s, vImage error %zd", __PRETTY_FUNCTION__, error);
}
}
此调用大约需要 20 毫秒。这具有在我的应用程序中无法使用的实际意义。也许直方图的均衡本来就很慢,但我也测试了 BGRA->Grayscale,发现 OpenCV 可以在 ~5ms 内完成,而 vImage 需要 ~20ms。
在测试其他功能时,我发现了一个 project that made a simple slider app 和一个 blur function (gist),我清理了它以进行测试。大约 20 毫秒。
是否有一些技巧可以让这些函数更快?
【问题讨论】:
-
虽然有些人不喜欢就针对性能的框架的性能提出问题,但我认为这个问题很有价值。 Apple 将 Accelerate 吹捧为一种轻松获取高性能代码的方法,但有关 Accelerate 使用的文档非常薄弱,因此可以通过获取一些与该主题相关的代码示例来改进它。
标签: ios opencv accelerate-framework vimage