我有一个关于加速几个emguCV电话的问题。目前,我有一个捕捉卡,在1920x1080@30赫兹的摄像头。使用directshow和样例抓取器,我捕获每个帧并将其显示在表单上。现在我已经写了一个图像稳定器,但我能跑得最快的是20赫兹左右。
我在我的稳定器中做的第一件事是将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-8ms。
因此,一帧计算的总时间约为48 is或约21 or。
不知怎么的,我需要把总时间控制在33毫秒以下。所以现在轮到我提问了。
First:,如果我切换到goodFeatures和opticalFlow中使用GPU,如果有必要的话,它会提供速度上的必要提高吗?
第二:除了使用GPU之外,还有其他方法可以加速这些计算吗?
发布于 2014-10-16 18:45:02
嗯,我终于把这些功能转换成了他们的GPU,并得到了我想要的提速。我从48 to降到22 to。
https://stackoverflow.com/questions/26330322
复制相似问题