多维向量分类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&lt;Vec2f&gt;(0)),它通过一个空组扩展groupedpoints。然后你可以做(groupedpoints.end()-1)-&gt;push_back(points[i]),在最后一组插入point[i] 谢谢。该评论完美地解释了一切并且奏效了。我将使用 groupedpoints.push_back(vector(0)); (groupedpoints.end()-1)->push_back(points[i]) 方法。

以上是关于多维向量分类opencv的主要内容,如果未能解决你的问题,请参考以下文章

分类和回归-支持向量机SVM算法

支持向量机分类及在R中实现

将c多维数组转换为多维c++向量

对多维向量进行排序

如何预留多维向量?

访问指向多维向量的指针向量中的元素