直接减去两个向量<point2f> </point2f>

时间:2014-03-30 14:52:08

标签: c++ opencv vector

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

这样的东西
Vector<Point2f> A[3];
A[2] = A[1] - A[0];

2 个答案:

答案 0 :(得分:5)

仅适用于运动;)

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]

答案 1 :(得分: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)
{ ... }

您需要优化上述函数,以避免函数返回时向量的副本。这并不排除需要编写要避免的循环代码。但它会为你提供一个更清晰的矢量减法语法。