OpenCV C++:根据存储在 int 向量中的索引为 Mat 类型数据创建列范围

Posted

技术标签:

【中文标题】OpenCV C++:根据存储在 int 向量中的索引为 Mat 类型数据创建列范围【英文标题】:OpenCV C++: Create Column Range for Mat type data from indices stored in int vector 【发布时间】:2016-02-29 08:22:02 【问题描述】:

一些(不连续的)索引存储在向量vec 中。给定Mat 类型data,如何创建仅包含在向量vec 中指定索引的列的数据子集? 对于行,我可以指定Range::all();但我无法为此子集指定列范围。

std::vector<int> vec = 1, 4, 7, 13, 21, 51, 87;
cv::Mat data, subData;
subData= data(Range::all(), colRange); //Not sure, what to write in place of colRange

【问题讨论】:

你不能使用这样的索引。您需要遍历 vec 并深复制所需的列 我没想到会这样。当我们说Range(start, end) 时,从开始到结束的数字序列由 Range 类型的对象表示(包装)。是否无法从此 Range 对象中删除某些元素? 不,因为那样你将不再有 Range,而是一组子 Range。但是您只需要将所需的列复制到一个新的矩阵中,这可以很容易地实现。 【参考方案1】:

按照 Miki 的建议,我做了以下事情:

    for (int index = 0; index < vec.size(); index++)
        data.col(vec[index]).copyTo(subData.col(index)); //loop over the vector, copy the data from vec[index] column to subData[index]

【讨论】:

以上是关于OpenCV C++:根据存储在 int 向量中的索引为 Mat 类型数据创建列范围的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV (C++) 中的向量比较

C++ 中的向量存储

在 C++ 中返回一个向量

归并排序向量 c++ opencv

在 C++ 中创建 OpenCV 矢量并存储到文本文件

OpenCV,C++:如何使用 cv::Meanshift