Emgu SURF DetectAndCompute内存问题

时间:2018-07-11 16:51:53

标签: c# visual-studio emgucv surf

我正在使用Emgu的SURF DetectAndCompute函数查找将图像拼接在一起的关键点和描述符。我正在Windows 10的Visual Studio 2017中的C#中运行代码。

我遇到的问题是,对于DetectAndCompute函数,当我使用的InputArray是UMat时,该函数可以正常工作,但是每次使用它时,都会增加进程的非托管内存。当我使用该函数35次时,进程内存空间不足,导致应用崩溃。如果我使用Mat格式,则非托管内存不会增加,但是稍后我会遇到内存访问错误(尝试编写一个只读节,通常表示在其他地方内存已损坏)。

我之前已经隔离了DetectAndCompute,以检查它是否是怪异增长的源头。

我正在谈论的InputArray是uModelImage。这是代码:

 public void FindMatchKeyPointsDescriptors(Mat Image, out VectorOfKeyPoint KeyPoints, out UMat Descriptors)
    {
        float hessianThresh = 400;

        KeyPoints = new VectorOfKeyPoint();
        Descriptors = new UMat();

        try
        {
            using (UMat uModelImage = Image.GetUMat(AccessType.Read))
            using (SURF surfCPU = new SURF(hessianThresh))
            {
                //extract features from the object image

                surfCPU.DetectAndCompute(uModelImage, null, KeyPoints, Descriptors, false);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception in FindMatchKeyPointsDescriptors => " + ex.ToString());
        }

    }

如何在不消耗大量内存的情况下运行DetectAndCompute?对于使用UMat和Mat时,为什么占用的内存空间之间存在差异,我也有些困惑。库函数不应该处置它使用的所有内容吗?任何见解将不胜感激!

0 个答案:

没有答案