OpenCV OCL逻辑索引

时间:2015-05-17 19:57:29

标签: c++ opencv matrix opencl

我正在研究一种在GPU上完成许多计算的算法。我主要使用oclMat结构,并试图避免从CPU复制到GPU,反之亦然,但我找不到一个简单的方法:

  1. 将ocl矩阵中的所有元素与特定的单个值(例如float或double)进行比较,并按照
  2. 创建逻辑矩阵
  3. 创建一个具有给定大小和类型的oclMat矩阵,并将所有元素初始化为特定值(例如,所有元素都是浮点数并且等于1.234567)
  4. 例如:

    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我知道它是如何完成的)。

    我假设存在一个简单的解决方法,但尚未找到一个......谢谢!

1 个答案:

答案 0 :(得分:1)

你是对的。看起来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);

P.S。另外,我建议您尝试使用Transparent-API的新OpenCV 3.0,这样可以更轻松地使用OpenCL在GPU上进行处理。