gpt4 book ai didi

c++ - OpenCV OCL 逻辑索引

转载 作者:行者123 更新时间:2023-11-28 06:16:03 25 4
gpt4 key购买 nike

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

  1. 将 ocl 矩阵中的所有元素与特定的单个值(例如,float 或 double)进行比较,并根据其创建逻辑矩阵
  2. 创建一个给定大小和类型的 oclMat 矩阵,并用所有元素初始化为特定值(例如,所有元素都是 float 且等于 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 我知道它是如何完成的)。

我假设存在一种简单的解决方法,但还没有找到...谢谢!

最佳答案

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com