如何在OpenCV中初始化matchTemplateBuff?

时间:2015-03-27 21:13:27

标签: c++ opencv

我正在Mac OS X上使用OpenCV和CUDA编写模式匹配代码。大约70帧后,它会慢下来。使用mach_absolute_time()我已经能够追踪罪魁祸首(最初我认为这是一个磁盘访问问题):

gpu::matchTemplate(currentFrame,
                   correlationTargets[i]->correlationImage,
                   temporaryImage,
                   CV_TM_CCOEFF_NORMED);

我认为这是由matchTemplate内部的一些内存问题引起的。经过大量的搜索,我找到了matchTemplateBuf结构,大概是为了重用内存。由于这个问题似乎与记忆有关,我认为使用它可能是解决方案。但是,以下代码崩溃:

gpu::MatchTemplateBuf mtBuff;

[...]

for(...) {

gpu::matchTemplate(correlationTargets[i]->croppedImage,
                   correlationTargets[i]->correlationImage,
                   correlationTargets[i]->maxAllocation,
                   CV_TM_CCOEFF_NORMED, mtBuff);

有错误:

OpenCV Error: Gpu API call (Unknown error code [Code = 9999]) in convolve,     file /Users/sermarc/Downloads/opencv-2.4-3.8/modules/gpu/src/imgproc.cpp, line 1431 libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /Users/sermarc/Downloads/opencv-2.4-3.8/modules/gpu/src/imgproc.cpp:1431: error: (-217) Unknown error code [Code = 9999] in function convolve  

我相信这是因为matchTemplateBuff未正确初始化。但是,我找不到任何显示它被设置为有效状态的信息或示例。

代码适用于:

gpu::matchTemplate(correlationTargets[i]->croppedImage,
                   correlationTargets[i]->correlationImage,
                   correlationTargets[i]->maxAllocation,
                   CV_TM_CCOEFF_NORMED);

0 个答案:

没有答案