如何使用OpenCV在C ++中将向量的向量结构复制到另一个向量

k

我有一个包含图像轮廓的向量。代码如下:

cv::Mat img = cv::imread ("whatever");

cv::Mat edges;
double lowThresh = 100, highThresh = 2*lowThresh;
Canny(img, edges, lowThresh, highThresh);

std::vector<std::vector<cv::Point>> contourVec;
std::vector<cv::Vec4i> hierarchy;
int mode = CV_RETR_LIST;
int method = CV_CHAIN_APPROX_TC89_KCOS;
findContours(edges, contourVec, hierarchy, mode, method);

我现在想做的就是改变这些观点。因此,我创建了另一个向量,该向量应具有与另一个向量相同的结构,只是使用Point3d元素代替Point此刻,我这样做是这样的:

std::vector<std::vector<cv::Point3d>> contour3DVec(contourVec.size());
for (int i = 0; i < contourVec.size(); i++)
    contour3DVec[i].resize(contourVec[i].size());

但是我不确定那是否真的是最好的方法,因为我不知道resize()它实际上是如何工作的(例如在内存位置领域)。

是否有人知道是否有更快和/或“更智能”的方式来解决此问题?提前致谢。

Xophos

考虑到您以后肯定要对轮廓进行处理,调整大小可能不会成为程序中的性能热点。

在c ++中创建矢量时通常会有些懈怠。它们可能会占用当前内存大小的两倍。

如果调整向量的大小,它将首先检查调整大小是否适合保留的内存。如果是这种情况,则调整大小是免费的。

否则,将保留新的内存(最大为新大小的两倍),并将当前矢量内容移到那里。

由于向量在开始时是空的,因此无论如何它们都必须保留新的内存,因此(考虑到合理的编译器和标准库),很难在实现速度上击败对手。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将重复的子结构从一个结构复制到另一个结构?

通过转换将C ++向量复制到另一个向量的最佳方法

如何基于属于另一个向量的一个向量合并向量列表?

如何将一个向量元素的引用复制到另一向量?

如何创建另一个向量的随机向量?

一个人如何在不复制的情况下将过滤一个向量的结果存储在另一个向量中

在C ++中将多个函数传递给向量中的另一个函数

如何将std :: vector <Eigen :: vectorXd>中的向量复制到另一个std :: vector <Eigen :: vectorXd>中的另一个向量

如何将向量复制到另一个位置并重用现有的已分配内存?

如何在不复制的情况下将一个向量移动到另一个向量

使用另一个向量复制R数据帧向量值

如何将一个向量复制到另一个向量的末尾?

如何将向量的每个元素的幂提高到另一个向量的每个元素的幂?

如何从R中的另一个向量中减去一个向量

如何将结构向量复制到另一种具有重复的结构向量

如何将引用的内容复制到另一个stl向量?

如何在不更新原始向量的情况下将一个向量复制到Java中的另一个向量?

使用索引向量从另一个向量生成向量

如何通过不同的类将一个向量复制到另一个向量

C ++更改向量内部,结构内部,另一个向量内部的结构的值

仅将向量中的字母复制到C ++中的另一个向量

如何在Matlab中将向量映射到另一个向量中的最近点?

如何将向量复制到另一个向量的子向量而不会出现段错误?

C++11,仅将一个字段复制到向量中

如何通过对另一个向量使用条件来创建新向量?

如何将一个结构向量映射或转换为另一个结构向量?

使用 MFC 将一个结构复制到另一个结构

如何将结构添加到来自另一个类的向量?

如何通过另一个向量对一个向量的向量进行排序?