我有一个关于加快几个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之外还有其他方法可以加快这些计算吗?
答案 0 :(得分:0)
好吧,我终于将功能转换为GPU对应物,并且提高了我想要的速度。我从48ms下降到22ms。