Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加速emguCV方法_C#_Opencv_Gpu_Emgucv - Fatal编程技术网

C# 加速emguCV方法

C# 加速emguCV方法,c#,opencv,gpu,emgucv,C#,Opencv,Gpu,Emgucv,我有一个关于加快几通emguCV电话的问题。目前,我有一个拍摄卡,可以在1920x1080@30Hz. 使用带有示例抓取器的directshow,我捕获每个帧并将其显示在表单上。现在我已经写了一个图像稳定器,但我能运行的最快速度是20Hz左右 我在稳定器中做的第一件事是将1920x1080缩小到640x480,因为它使特征轨迹更快 然后我使用goodFeaturesToTrack previousFrameGray.GoodFeaturesToTrack(sampleSize, sampleQu

我有一个关于加快几通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的良好功能和光流将提供必要的速度增加,如果有的话


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

我最终将函数转换为GPU对应函数,并获得了我想要的速度提升。我从48毫秒降到22毫秒。

您的CPU使用了多少?如果两个调用在内部不是并行的,那么您可能可以并行执行它们:更好的CPU/更多的内核将加快速度-我有一个i7-3960X@4Ghz,使用率为52%。它看起来也在使用我所有的内核。