【问题标题】:OpenCV: how to access one contour in O(1) after call cvFindContours()?OpenCV:如何在调用 cvFindContours() 后访问 O(1) 中的一个轮廓?
【发布时间】:2011-01-08 22:02:56
【问题描述】:

我正在使用 OpenCV 比较两个图像中的两个 blob。假设我已经知道 一对可能相似的斑点,我知道它们的索引 在轮廓数组(由 cvFindContours() 生成)中,我怎样才能得到 在恒定时间内访问一个轮廓?

最繁琐的方法是多次使用链接操作(contours=contours->h_next),但我想知道是否有更快的方法来检索数组中的一个轮廓。

我在调用 cvFindContours() 时使用了 CV_RETR_EXTERNAL 和 CV_CHAIN_APPROX_NONE。

谢谢! -J.C.

【问题讨论】:

    标签: opencv


    【解决方案1】:

    我认为cvGetSeqElem 功能可以满足您的需求。引用OpenCV docs:“假设块数远小于元素数,该函数的时间复杂度为 O(1)。”我想“块”在这种情况下意味着“轮廓”。

    另外,看看cvCvtSeqToArray (link),它将一个序列复制到一个连续的内存块中。

    【讨论】:

    • 感谢 cmets!我猜 cvGetSeqElem 不是我想要的:它从序列中检索一个元素——在这种情况下,它是轮廓上的一个点。我同意 cvCvtSeqToArray 可以完成这项工作,但您可能会注意到,像这样操作轮廓(新建/删除、内存复制等)很尴尬。
    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2016-09-25
    • 1970-01-01
    • 2014-01-22
    • 2014-07-12
    相关资源
    最近更新 更多