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 类型数据创建列范围的主要内容,如果未能解决你的问题,请参考以下文章