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、 我在上面添加了一张结果的图片。我唯一需要做的就是调整函数,确定线片段是否属于一起,并实际对车道进行分类。
\
\
--------
\
\
|
/
/