我正在研究在GPU上进行许多计算的算法。我主要使用oclMat结构,并试图避免从CPU复制到GPU,反之亦然,但是我找不到一种简单的方法来:
例如:
cv::ocl::oclMat M1 =...
// DO STUFF WITH M1
cv::ocl::oclMat logicalM1 = M1>1.55; // compare directly to a single value
cv::ocl::oclMat logicalM2 = ... ; // i.e. I want a 100x100 CV_32FC1 matrix with all elements set to be equal to 1.234567
通过阅读文档,似乎使用cv::ocl::compare仅适用于相同维度和类型的两个矩阵,因此也许我的第一个请求是不可行的。另一方面,我不知道如何直接在ocl中初始化特定的矩阵(使用cv::Mat我知道它是如何完成的)。
我认为存在一个简单的解决方法,但是还没有找到一个方法...谢谢!
最佳答案
你是对的。好像cv::ocl::compare
在输入上仅支持两个cv::oclMat
。
但是您可以按以下方式创建用特定值填充的oclMat
:
cv::ocl::oclMat logicalM2(M1.size(), M1.type);
logicalM2.setTo(cv::Scalar(1.234567));
cv::ocl::oclMat logicalM1;
cv::ocl::compare(M1, logicalM2, logicalM1, cv::CMP_GT);
附言我也建议您尝试使用带有透明API的新OpenCV 3.0,这将使在使用OpenCL的GPU上进行处理变得更加容易。
关于c++ - OpenCV OCL逻辑索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30291509/