我正在尝试进行自己的 blob 检测,谁会收到实时视频,并尝试检测白皮书。即使是在纸上写的东西。我需要检测纸张并且是角落,因为我真正想要的是在纸张的每个角落在纸张上绘制一个opengl多边形将是多边形的一个角落。然后我需要纸张的坐标来做其他事情。所以我需要: - 检测一个方形的白色斑点。- 获取角的坐标 - 在白纸上绘制一个多边形。
任何想法我该怎么做?
我正在尝试进行自己的 blob 检测,谁会收到实时视频,并尝试检测白皮书。即使是在纸上写的东西。我需要检测纸张并且是角落,因为我真正想要的是在纸张的每个角落在纸张上绘制一个opengl多边形将是多边形的一个角落。然后我需要纸张的坐标来做其他事情。所以我需要: - 检测一个方形的白色斑点。- 获取角的坐标 - 在白纸上绘制一个多边形。
任何想法我该怎么做?
很大程度上取决于上下文。例如,假设您:
知道纸张总是大致居中(即 W/2,Y/2 总是在 blob 内部),并且旋转不超过 45 度(30 会更好)
在片材周围有一个合适的边框,这样角落就不会接触到 FOV 的边缘
能够(通过局部方差分析,或者如果幸运的话,检查背景颜色或亮度)判断一个点是在斑点内部还是外部
内部/外部功能永远不会失败(可能在边界附近除外)
然后你可以从边界上的一点(肯定在外面)和中心(肯定在里面)走一条线,甚至通过二等分,并在边缘找到一个点 - 一个区域。
两个边缘点给出一个矩形(两个区域给出一个光束),两个矩形给出一个交叉点(两个光束给出一个更大的区域) - 这就是你的角落。您应该携带检测不确定性(区域半径)以验证拐角(另一种不太优雅的方法是粗略计算拐角的位置,并通过螺旋搜索或醉汉步行来确定它)。
该算法适用于并行化,并且只要假设成立,它应该非常快。
尽管如此,它仍然是一个黑客——我同意放松,为什么要重新发明轮子?如果您有内存或 CPU 限制(嵌入式系统等),我相信 ARM 和嵌入式平台也应该有 OpenCV 和 e-Vision“精简版”端口。
(对不起我的术语-我是从意大利语翻译过来的。“Areal”可能对应于您的“blob”,光束是连接两个不同blob中所有点对的线族,线强度是乘积点到其区域中心的距离)
我正在尝试进行自己的 blob 检测,谁会收到实时视频,并尝试检测白皮书。
你的第一个镜头可能是一个简单的flood-fill。即选择一个好的阈值对图像进行二值化并应用算法。X
如果您知道纸张总是比这更亮而背景总是比这更暗,则可以固定阈值。或者这可以是一个自适应阈值,例如Otsu 的方法。OpenCV 免费提供此功能。
如果您需要加快速度,您可以使用联合查找数据结构。
最后,您需要提出一些启发式方法来识别角点(例如 x/y 方向的四个极值)。
然后我需要 [...] 角的坐标 [...]
那么你不需要斑点检测,而是首先需要角检测或轮廓检测。OpenCV 有一些很好的功能。如果你不能使用它,我建议像上面那样对图像进行二值化,并使用 harris-detector 来查找对象的角落。
如果您使用OpenCV 的 TBB 支持并且遇到满足您的实时要求的问题,它也可以派上用场。