将cv :: Point2f的向量与cv :: Mat X33f相乘

时间:2013-08-13 07:11:50

标签: c++ opencv vector

我有一个正常的功能:

cv::Point2f classA::DoStuff(cv::Point2f pTmp){
    cv::Matx33f newMatrix = oldMatrix ; // oldMatrix  is already defined 
    cv::Point3f  newPoint = newMatrix *pTmp;
    cv::Point2f result(newPoint.x, newPoint.y);
    return result;
}

好吧现在我想在一组点上运行这个函数我知道我可以使用for循环执行此操作,但是从这个答案中,将一个向量与一个标量相乘:

std::transform(myv1.begin(), myv1.end(), myv1.begin(),
               std::bind1st(std::multiplies<T>(),3));

Multiply vector elements by a scalar value using STL

我想有可能在一行中做任何想法如何使用我的函数执行此操作,如:

std::vector<cv::Point2f> classA::Dostuff(std::vector<cv::Point2f> inputVector){
    cv::Matx33f newMatrix = oldMatrix ; // oldMatrix  is already defined 

..!!! 

提前谢谢?

}

1 个答案:

答案 0 :(得分:2)

假设你想从classA的实例中运行它,它会是这样的:

using namespace std::placeholders;
std::transform(vec.begin(), 
               vec.end(), 
               vec.begin(), 
               std::bind(&classA::DoStuff, this, _1));

其中vecstd::vector<std::vector<cv::Point2f>>。请注意,您可能正在制作不必要且可能代价高昂的输入向量副本。除非你在函数中需要一个副本,否则最好传递一个const引用:

std::vector<cv::Point2f> classA::Dostuff(const std::vector<cv::Point2f>& inputVector);