【发布时间】:2016-04-04 03:12:55
【问题描述】:
我在 OpenCV 中有一个实时应用程序,我需要获取当前视频帧,并分析它的轮廓,然后使用这些轮廓的质心。到目前为止,基础知识都很好并且工作正常。
我预见的问题是我的输入帧“嘈杂”,以至于我可能会看到每个帧的质心数量不同,这是我感兴趣的处理方法。
我感兴趣的对象在每一帧中都会产生积极的命中,例如,如果我期望 14 个,那么每帧我会至少得到 14 个。我也先验地知道框架中对象之间的空间关系(例如,它们永远不会交叉,存在对称性,例如在其他规则中,左上角的规则就是:左上角 - always)所以我可以相信无论 openCV findContours 函数找到它们的顺序如何,都将保持不变(例如,它可能会发现找到的第三个轮廓始终是左上角的)。
问题在于误报,因为它们对排序感到奇怪,以至于我刚刚概述的“逻辑”不友好地分崩离析。假阳性可以出现在任何地方,我最终可能有 15 个质心,因此“3”现在可能是假阳性,“4”是左上角,依此类推。
问题:它看起来只是一个单击功能 - 清除你的向量并重新开始之类的东西 - 但是 OpenCV 有没有办法解决这个问题?
如果我必须自己动手 - 他们通常的策略是什么?
由于帧中的对象在连续帧之间的“范围内”是连续的,我猜想我可以玩这个 - 再加上前面提到的已知空间关系(再次,“在一个范围内”) - 我可能正在做饭加气 :) - 事情是,我会在每一帧之间这样做......
就循环执行时间而言,我面临着很短的时间要玩的墙 - 如果我可以依靠已经解决的具有最佳算法复杂性的问题而不是我自己的杂乱无章,我完全赞成。
有人要教我什么吗? (我说得有道理吗?)
SO 建议的“可能已经有你答案的问题” - 肯定是相关的 - 但更具体,我的可能更笼统(?)
【问题讨论】:
-
一张图片会让问题更清楚,尽管你的回答对我很有用。
-
@Shan True... 见答案。
标签: c++ opencv image-processing