C++ 如果包含重复元素,如何合并多个向量?

C++ 如果包含重复元素,如何合并多个向量?,c++,opencv,vector,C++,Opencv,Vector,我正在尝试合并包含由houghLinesP提取的、属于一起的行的向量 到目前为止,我有一个包含线段的向量: vector<Vec4i> lines; 矢量线; 我还有一个算法,可以检查线段是否足够相似,是否被认为属于其他线段(目前仅基于距离和角度): 矢量线簇; 用于(Vec4i线路1:分拣线路){ 点l1o=点(第1[0]行、第1[1]行); 点l1d=点(第1[2]行、第1[3]行); 向量聚类; 用于(Vec4i线路2:分拣线路){ 点l2o=点(第2[0]行、第2[1]行

我正在尝试合并包含由
houghLinesP
提取的、属于一起的行的向量

到目前为止,我有一个包含线段的向量:

vector<Vec4i> lines;
矢量线;
我还有一个算法,可以检查线段是否足够相似,是否被认为属于其他线段(目前仅基于距离和角度):

矢量线簇;
用于(Vec4i线路1:分拣线路){
点l1o=点(第1[0]行、第1[1]行);
点l1d=点(第1[2]行、第1[3]行);
向量聚类;
用于(Vec4i线路2:分拣线路){
点l2o=点(第2[0]行、第2[1]行);
点l2d=点(第2[2]行、第2[3]行);

if((getDistance(l1o,l1d,l2o,l2d)设置在这个问题中很重要。我假设
vec4i
是一对描述直线段的点(例如,(a,b,c,d)=>(x1,y1)->(x2,y2))

构造
vec4i
,使(x1 这允许您在所有线段上进行一次从左到右的传递。 创建一个新构造,称之为线:

struct Line {
  std::vector<vec4i> segs;
  const vec2i &getEnd() const { *segs.rbegin(); }
};
这将连接所有从左到右的线段。如果有这样更复杂的线段,则需要第二个过程来连接知道线段两端的线段:

      \
       \
--------
(水平、对角线)或类似于图表末尾的后曲线

   \
    \
     |
    /
   /

(曲线向下,曲线向上)您希望合并成一行而不是两行。

根据排序方式,您可以在一个轴上进行一次单次遍历,在每个向量中保留一个迭代器,在每个迭代器增量后进行比较。@Braaedy我根本没有对它们进行排序。您建议以何种方式进行排序?我还更新了问题,以使我的inte有点明显。等一秒钟,我会写一个更复杂的回答。谢谢你花时间!这看起来很有希望。我现在有点累,但我明天一定会仔细看看,让你知道进展如何。当然,我会试着回过头来回答问题。谢谢你的建议很有效m、 我在上面添加了一张结果的图片。我唯一需要做的就是调整函数,确定线片段是否属于一起,并实际对车道进行分类。
      \
       \
--------
   \
    \
     |
    /
   /