加速emguCV方法

时间:2014-10-12 21:44:36

标签: c# opencv gpu emgucv

我有一个关于加快几个emguCV调用的问题。目前我有一张采集卡,可以在1920x1080 @ 30Hz下拍摄相机。将directshow与样本采集器一起使用,我捕获每个帧并将其显示在表单上。现在我已经写了一个图像稳定器,但我能跑得最快的是20Hz。

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

然后我使用goodFeaturesToTrack

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

需要大约12-15ms。

我接下来要做的是使用此

进行光流计算
OpticalFlow.PyrLK(previousFrameGray, frame_gray, prev_corner.ToArray(), new Size(15, 15), 5, new MCvTermCriteria(5), out temp, out status, out err);

这需要大约15-18ms。

我调用的最后一个消耗方法是warpAffine函数

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

这需要大约10-12毫秒。

其余的计算,图像缩放以及总共大约7-8ms的内容。

因此帧计算的总时间约为48ms或约21Hz。

不知怎的,我需要让总时间低于33毫秒。 现在我的问题。

首先:如果我切换到使用GPU进行goodFeatures,那么光流将提供速度的快速提升吗?

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

1 个答案:

答案 0 :(得分:0)

好吧,我终于将功能转换为GPU对应物,并且提高了我想要的速度。我从48ms下降到22ms。