繁体   English   中英

如何有效地传递std :: vector的子向量 <cv::Point3f> 作为参数(不具有自己的功能)

[英]How to pass efficiently a subvector of std::vector<cv::Point3f> as parameter (don't own function)

我正在尝试使用一个opencv函数,该函数除其他参数外还接受std::vector<cv::Point3f> 在我的程序中,我有一个std::vector<cv::Point3f> worldPoints和另一个std::vector<int> mask ,它们的尺寸都比我要发送的尺寸大。

我想做的是尽可能高效地仅将具有各自非零掩码的条目传递给opencv函数。

std::vector<cv::Point3f> worldPointsSubset;
for (int i=0; i<mask.size(); i++) {
    if (mask[i] != 0) {
        worldPointsSubset.push_back(worldPoints[i]);
    }
}

// Then use worldPointsSubset in function

还有其他解决方法,可能不涉及数据复制吗?

编辑1:我要指的功能是solvePnPRansac()

调用的函数需要Point3f的向量,因此,如果唯一的东西是带掩码的向量,则必须首先复制数据。 如果函数不接受向量及其掩码,则无法解决此问题。

若要查看此副本是否存在问题,必须首先评估性能下降,并查看此副本是否是瓶颈。 如果是瓶颈,那么第一件事就是计算所需的点数并将其保留在worldPointsSubset

没有副本就无法将数据从std::vector<int>std::vector<cv::Point3f> ,因为尽管您看到的是相同的值,但数据大小可能会有所不同。

但是,您可以将正在处理的数据类型( std::vector<int>更改为std::vector<cv::Point3f> )并直接与cv::Point3f并在需要时将其传递给solvePnPRansac()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM