【发布时间】:2015-04-23 15:46:48
【问题描述】:
我有一个包含图像轮廓的向量。代码如下所示:
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);
我现在想做的是转换这些点。因此,我创建了另一个向量,它与另一个向量具有相同的结构,只是使用Point3delements 而不是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()实际上是如何工作的(例如在内存位置领域)。
有没有人知道是否有更快和/或“更智能”的方法来解决这个问题?提前致谢。
【问题讨论】:
-
嗨,我想创建一个结构。我还能用这样的方式打电话给
findContours()吗?struct xy {cv::Point contour; cv::Point3d contour 3D; ...}所以函数调用看起来像这样:findContours(edges, xyVariable.contour, ...)