【问题标题】:OpenCV OCL logical indexingOpenCV OCL 逻辑索引
【发布时间】:2015-05-17 19:57:28
【问题描述】:

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

  1. 将 ocl 矩阵中的所有元素与特定的单个值(例如浮点数或双精度值)进行比较,并根据该值创建逻辑矩阵
  2. 创建一个给定大小和类型的 oclMat 矩阵,并将所有元素初始化为特定值(例如,所有元素都是浮点数且等于 1.234567)

例如:

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我知道它是怎么做的)。

我认为存在一个简单的解决方法,但还没有找到...谢谢!

【问题讨论】:

    标签: c++ opencv matrix opencl


    【解决方案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);
    

    附:另外我建议您尝试使用透明 API 的新 OpenCV 3.0,这使得使用 OpenCL 在 GPU 上进行处理变得更加容易。

    【讨论】:

    • 关于创建新矩阵的优秀答案!至于 OpenCV 3.0 - 我知道,但正在等待最终版本(目前在 RC1 中)。
    • 顺便说一句,OpenCV 3.0 支持与标量比较。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 2018-01-19
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多