![](/img/trans.png)
[英]How to pass vtkMatrix and std::vector<cv::Point3f> as function parameters?
[英]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.