【问题标题】:opencv contour for lines线条的opencv轮廓
【发布时间】:2020-07-04 05:43:40
【问题描述】:

我有一张由线条组成的黑白图像,如下所示:

我试图得到可以描述曲线的点,所以本质上是轮廓。但是,轮廓跟踪边界,因此对于线条,它从开始到结束,然后返回到开始。

我得到的轮廓如下: cv::findContours(src, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_NONE);

为了尝试摆脱我正在运行的回溯所代表的点

approxPolyDP(contour, contour, epsilon, true); 但是,这仍然会在返回的路上留下积分。

有没有更好的方法来解决这个问题?我的线条图可能比这张更复杂。

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    此问题的原因是您使用cv::RETR_TREE 作为轮廓检索模式。这种模式正如documentations 所说:

    CV_RETR_TREE 检索所有轮廓并重建完整的轮廓 嵌套轮廓的层次结构。

    因此,在您的行中,您会找到主线的内线和外线。在这种情况下,它可以是使用(仅外线)CV_RETR_EXTERNAL 代替 CV_RETR_TREE 的解决方案。

    CV_RETR_EXTERNAL 仅检索极端外轮廓。

    【讨论】:

    • 是的,这就是原因,即使你的轮廓很细,CV_RETR_TREE 不会算1,会算2。你可以尝试体验一下。
    • 尝试用 CV_CHAIN_APPROX_SIMPLE 也改变 CV_CHAIN_APPROX_NONE 并告诉我结果
    • 共享整个代码可能会更好,因为根据我的经验,它应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 2020-07-21
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    相关资源
    最近更新 更多