我在Win 8.1 64位计算机上使用带有VS2012 C ++ / CLI的OpenCV 3.0。
此外,我还有一台带有CUDA 7.0的NVidia GTX 760。
我正在尝试检测SURF关键点,但仅限于ROI内。我使用非GPU代码工作,现在尝试使用GPU实现做同样的事情。为了做到这一点,我明白我首先需要创建一个填充了背景值(0)的掩码,然后在掩码中指定ROI并用另一个值(255)填充它。然后我将此掩码作为SURF调用的一部分传递。
以下代码应该创建掩码并用零填充。
cuda::GpuMat tMask(dImages->d_gpuGrayFrame->size(), dImages->d_gpuGrayFrame->type());
tMask.setTo(Scalar::all(0)); // crashes on this line
我也尝试过:
cuda::GpuMat tMask(dImages->d_gpuGrayFrame->size(),CV_8U);
tMask.setTo(Scalar::all(0)); // crashes on this line
我也尝试了以上两种方法,但是使用setTo行:
tMask.setTo(0); // crashes on this line
但那仍然会崩溃。这有点令人困惑,因为我看到了例如link的例子,其中掩码被定义为:
GpuMat mask(object_gpu.size(), CV_8U, 0xFF);
mask.setTo(0xFF);
当我尝试类似的东西时,我甚至没有通过编译器,因为它说掩码调用无法识别为变体。
任何帮助,找出正在发生的事情。