我正在使用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时,为什么占用的内存空间之间存在差异,我也有些困惑。库函数不应该处置它使用的所有内容吗?任何见解将不胜感激!