将cv::Points2f的向量与cv::Matx33f相乘

Multiplying a a vector of cv::Points2f with a cv::Matx33f

本文关键字:cv Matx33f 相乘 Points2f 向量      更新时间:2023-10-16

我有一个运行良好的函数:

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));

使用STL 将矢量元素乘以标量值

我想在一行中就可以做到这一点——任何关于如何使用我的功能的想法,比如:

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

提前谢谢?

}

假设您想从classA的实例内部运行它,它将是这样的:

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

其中CCD_ 2是CCD_。请注意,您可能正在制作输入向量的不必要且可能成本高昂的副本。除非你在函数中需要一个副本,否则你最好传递一个常量引用:

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