我正在研究一种算法,在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,我知道它是如何实现的)。
我想有个简单的解决办法,但还没找到.谢谢!
发布于 2015-05-17 21:43:59
你是正确的。看起来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);另外,我建议您尝试使用透明的OpenCV 3.0,这使得在GPU上使用OpenCL的处理更加容易。
https://stackoverflow.com/questions/30291509
复制相似问题