【问题标题】:Speeding up emguCV methods加速 emguCV 方法
【发布时间】:2014-12-07 10:44:10
【问题描述】:

我有一个关于加快 emguCV 调用速度的问题。目前我有一张采集卡,可以接收 1920x1080@30Hz 的相机。使用带有样本采集器的 directshow 我捕获每一帧并将其显示在表单上。现在我已经写了一个图像稳定器,但我能运行它的最快速度大约是 20Hz。

我在稳定器中做的第一件事是将 1920x1080 缩小到 640x480,因为它使特征跟踪速度更快。

然后我使用 goodFeaturesToTrack

previousFrameGray.GoodFeaturesToTrack(sampleSize, sampleQuality, minimumDistance, blockSize)[0]);

大约需要 12-15 毫秒。

接下来我要做的是使用这个进行光流计算

OpticalFlow.PyrLK(previousFrameGray, frame_gray, prev_corner.ToArray(), new Size(15, 15), 5, new MCvTermCriteria(5), out temp, out status, out err);

这大约需要 15-18 毫秒。

我最后调用的耗时方法是warpAffine函数

 Image<Bgr, byte> warped_frame = frame.WarpAffine(T, interpMethod, Emgu.CV.CvEnum.WARP.CV_WARP_DEFAULT, new Bgr(BackgroundColor));

这大约需要 10-12 毫秒。

其余的计算、图像缩放等总共需要大约 7-8 毫秒。

所以一帧计算的总时间大约是 48ms 或大约 21Hz。

不知何故,我需要将总时间控制在 33 毫秒以下。 那么现在来回答我的问题。

首先:如果我切换到使用 GPU 来实现 goodFeatures 和opticalFlow 是否会提供必要的速度提升(如果有的话)?

第二:除了使用 GPU 之外,还有其他方法可以加速这些计算吗?

【问题讨论】:

  • 您的 CPU 使用了多少?也许您可以并行执行两个第一个调用(如果它们在内部不是并行的)iow:更好的 CPU/更多内核将加速它;-)
  • 我有一个 i7-3960X @ 4Ghz,它正在使用 52%。它看起来也正在使用我所有的核心。

标签: c# opencv gpu emgucv


【解决方案1】:

好吧,我终于将这些功能转换为它们的 GPU 对应功能,并获得了我正在寻找的速度提升。我从 48 毫秒缩短到 22 毫秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2020-02-14
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多