直接减去两个vector<point2f>

Posted

技术标签:

【中文标题】直接减去两个vector<point2f>【英文标题】:Subtracting two vector<point2f> directly 【发布时间】:2014-03-30 14:52:07 【问题描述】:

我必须减去两个 Point2f 类型的向量(两者大小相同)。我知道可以通过提取每个索引处的值然后在循环中减去它们来完成,但是有直接的方法吗?类似的东西

Vector<Point2f> A[3];
A[2] = A[1] - A[0];

【问题讨论】:

如果你包含一些关于 Point2f 的内容,任何 c++ 编码器都可以帮助你... 它是OpenCV库中使用的基本结构docs.opencv.org/modules/core/doc/basic_structures.html#point 谢谢,我已经找到了。只是这个是你对opencv的唯一依赖(而不是核心问题所必需的)。最好减少您的问题中的任何依赖关系,这样更多的人可能会尝试帮助您... 【参考方案1】:

只是为了运动;)

std::vector<Point2f> A,B;
A.push_back(Point2f(1,2));
A.push_back(Point2f(3,4));
A.push_back(Point2f(5,6));
B.push_back(Point2f(5,2));
B.push_back(Point2f(4,4));
B.push_back(Point2f(3,6));

// Mat C; subtract(A,B,C);
Mat C = Mat(A) - Mat(B);
cout<< A << endl << B << endl <<C<<endl;



[1, 2;  3, 4;  5, 6]
[5, 2;  4, 4;  3, 6]
[-4, 0;  -1, 0;  2, 0]

【讨论】:

【参考方案2】:

根据您提供的文档链接,支持减去两点。所以以下应该工作:

std::transform (A[1].begin(), A[1].end(), A[0].begin(), A[2].begin(), std::minus<Point2f>());

请注意,这假设 A[2] 大到足以存储结果。

或者,您可以编写自己的重载 operator-() 用于向量减法:

const vector<Point2f> operator-(const vector<Point2f>& lhs, const vector<Point2f>& rhs)
 ... 

您需要优化上述函数以避免在函数返回时复制向量。这并不排除编写您想要避免的循环代码的需要。但它会给你一个更简洁的向量减法语法。

【讨论】:

以上是关于直接减去两个vector<point2f>的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将vector<Point2f> 转换为vector<Keypoint>?

从 Vector<point2f> 创建 Mat 断言失败错误

Algorithm参数记录

OpenCV2.4.2将vector<Point2f>转换为Mat,释放mat会报错

将openCV矩阵转换为向量

Opencv学习笔记之——画出两帧的特征点之间的对应关系