Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何消除“错误”;“加倍”;c+中向量的元素+;_C++_Arrays_Algorithm_Vector - Fatal编程技术网

C++ 如何消除“错误”;“加倍”;c+中向量的元素+;

C++ 如何消除“错误”;“加倍”;c+中向量的元素+;,c++,arrays,algorithm,vector,C++,Arrays,Algorithm,Vector,我用HoughLines检测帧中的线条,线条信息保存在cv::vector中,我将其作为二维数组处理,我对第二个感兴趣,它是线条的角度,我只想保留角度差大于1.5 rad的直线,因此我在这里做了以下工作: ............................. cv::vector<cv::Vec2f> lineQ; .............................. // ordring the vector based on the angle value i

我用
HoughLines
检测帧中的线条,线条信息保存在
cv::vector
中,我将其作为二维数组处理,我对第二个感兴趣,它是线条的角度,我只想保留角度差大于
1.5 rad
的直线,因此我在这里做了以下工作:

.............................
cv::vector<cv::Vec2f> lineQ;
..............................

  // ordring the vector based on the angle value in rad 
for ( int i = 0 ; i< lineQ.size()-1; i++){
                for(int j= i+1;j<lineQ.size();j++){
                        if(lineQ[i][1] > lineQ[j][1]){
                            tmp = lineQ[i];
                            lineQ[i] = lineQ[j];
                            lineQ[j] = tmp;
                        }           
                }
            }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
向量lineQ;
..............................
//基于rad中的角度值对向量进行排序
对于(int i=0;i
现在我想根据角度比较向量元素之间的差异

cv::vector<cv::Vec2f> line;
for ( int i = 0 ; i< lineQ.size()-1; i++){
                for ( int j= i+1; j<lineQ.size(); j++){
            if(fabs(lineQ[i][1] - lineQ[j][1])>1.5){
                        line.push_back(lineQ[i]);

                        }
                }
            }
cv::矢量线;
对于(int i=0;i
这适用于2条线,但当我得到3时,比如说1.3rad作为线大小的角度
不到2。我想使用
擦除
,但这会改变向量的大小

一个选项是提供一个软“等于”到
std::unique\u copy

std::unique_copy(lineQ.begin(), lineQ.end(), std::back_inserter(line),
                 [](const cv::Vec2f & a, const cv::Vec2f & b) {
                     return b[1] - a[1] <= 1.5;
                 });
std::unique_copy(lineQ.begin()、lineQ.end()、std::back_inserter(line),
[](常数cv::Vec2f&a,常数cv::Vec2f&b){

返回b[1]-a[1]看看这是否有助于复制擦除的问题,因为我只想基于第二维度对其进行比较!@TomekSzpakowicz不!不清楚您想做什么。您能给出一个输入和预期输出数据的示例吗?返回b[1]-a[1]是什么意思?1是什么意思?@Engine:
a
b
对应于
lineQ[i]
lineQ[j]
(排序)。由于您编写了
lineQ[i][1]
,我假设每个向量中的元素一个包含排序/匹配键。非常感谢您的帮助!对于理解函数,[]before(const…)mean?@Engine:这是一个C++11 lambda(又名匿名函数)的语法。它有点像在文件范围内声明一个函数
bool Vec2f_近似_eq(const cv::Vec2f&a,const cv::Vec2f&b){return…}
,然后作为谓词传入:
std::unique_copy(…,Vec2f_近似_eq)
。显然,lambda更干净,因为它可以让您将所有东西都放在一个地方。@Engine:我很乐意,但请注意,评论是用来评论问题或答案的,而不是用来联系人的。
std::sort(lineQ.begin(), lineQ.end(),
          [](const cv::Vec2f & a, const cv::Vec2f & b) {
              return a[1] < b[1];
          })).