我正在开发OpenCV GPU。
我想知道,我们可以直接在C ++代码中访问GpuMat
元素吗?
很少有人知道这件事是不可能的。
我正在从GPU内存下载数据到CPU内存,然后使用'at'操作符访问元素。
但我需要这样的事情: 对于2x3矩阵: 元素应填写如下:
Mat abc(0 , 0) = 1;
Mat abc(0, 1) = 2;
Mat abc (0 , 2) = 3;
Mat abc(1 , 0) = 1;
Mat abc(1, 1) = 2;
Mat abc (1 , 2) = 3;
即。 ,用不同的值填充每一列。 在for循环中使用'at'运算符非常耗时。 是否有任何API或其他方式在更短的时间内完成。
答案 0 :(得分:3)
GpuMat
提供same functionality作为cv::Mat
的大部分内容。您可以使用col()
创建子矩阵,并使用setTo()
填充数据:
cv::gpu::GpuMat gm(3,3,CV_8UC1);
for (int i = 0; i < gm.cols; ++i)
{
auto column = gm.col(i);
auto val = cv::Scalar(i + 1); // This value is just to reflect your example.
column.setTo(val);
}