多维向量分类opencv
Posted
技术标签:
【中文标题】多维向量分类opencv【英文标题】:Multidimensional vector classification opencv 【发布时间】:2014-07-11 13:10:31 【问题描述】:我将从我想做的事情开始。我有一个充满点的向量。
vector<Vec2f> points;
我想根据它们与起点的距离对它们进行分组,如果该点更远,则创建一个新条目并执行相同操作。
例如,第一个点在 50、50 处,并且在 0,0 - 100,100 的距离内有几个点,那么在不同距离内有更多的点。
这是我最后想要的数据元素:
vector<vector<Vec2f>> groupedpoints;
为了填充分组点,我将创建一个 for 循环,将每个 Vec2f 点数据元素与第一个 Vec2f 数据元素进行比较。如果条件不满足并且点太远,我会 push_back groupedpoints 并开始填充它。
groupedpoints[clusternumber][clusterpointnumber]
所以第一个点将放在 groupedpoints[0][0] 其他符合条件的点将放在 groupedpoints[0][1....] 如果找到不符合条件的点,我将在 groupedpoints[1][0] 中创建一个新条目,然后将后续点放在 groupedpoints[1][1....] 中,依此类推,直到所有点是分类的。
问题是我不知道如何初始化分组点中的新条目,.push_back 方法将存储所有值。
有什么办法可以克服吗?我有类似的解决方法:
groupedpoints.resize(1);
groupedpoints[0].push_back(points[0]);
但我不想每次在最后需要一个值时都调整向量的大小。如果没有调整大小,我在第一次写入时就会出错 - 向量下标超出范围。如果我调整它的大小,一切正常。
【问题讨论】:
请说明slines和lines的含义。我以为你想将points
中的元素放入 groupedpoints
那么你想在 slines
中推回什么?
对不起。在某个时候,我回到了自己的编码世界并在那里使用了变量:D slines = groupedpoints points = lines(编辑过的原始帖子)
【参考方案1】:
那是因为一开始你没有初始化groupedpoints
。当您调用 resize
时,向量的大小将设置为 1,因此它正好包含 1 个元素。你需要做的是初始化变量groupedpoints
(你也可以通过调用resize
来做到这一点,但你只需要调用一次)。
vector<vector<Vec2f> > groupedpoints = vector<vector<Vec2f> >(1,vector<Vec2f>(0,Vec2f());
//here you use the contructors of vector and Vec2f respectively to make groupedpoints contain exactly one (empty) element which is the first group;
vector<vector<Vec2f> > groupedpoints;
groupedpoints.resize(1);
//this will have the same effect since the inner vector is initialized using its default constructor (= empty);
【讨论】:
如果我只需要使用 1ce 就不会有问题。但是在我的情况下,我必须在每次 .push_back 操作之前使用 resize ,否则我会收到此错误:i.imgur.com/YDb8mGV.png 为了解决它,我使用了这个:vecs++; groupedpoints.resize(vecs); groupedpoints[vecs-1].push_back(points[i]); Vecs 是所需空间的计数器。 那么请向我们提供您正在做什么(即您在某个外部站点上的整个代码),因为上述方法应该确实有效。请注意,当您创建一个新组时(这是您执行vecs++
和groupedpoints.resize(vecs)
atm 时),您首先必须推回groupedpoints
中的一个元素,例如groupedpoints.push_back(vector<Vec2f>(0))
,它通过一个空组扩展groupedpoints
。然后你可以做(groupedpoints.end()-1)->push_back(points[i])
,在最后一组插入point[i]
。
谢谢。该评论完美地解释了一切并且奏效了。我将使用 groupedpoints.push_back(vector以上是关于多维向量分类opencv的主要内容,如果未能解决你的问题,请参考以下文章