如何在OpenCV C ++中使用不同的值填充每个cv :: Mat列?

时间:2013-07-18 19:22:10

标签: c++ opencv

我正在开发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或其他方式在更短的时间内完成。

1 个答案:

答案 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);
}