我有一个 OpenCV 应用程序,它来自办公室内部的网络摄像头流(很多细节),我必须在其中找到一个人工标记。标记是白色背景上的黑色方块。我使用 Canny 查找边缘并使用 cvFindContours 进行轮廓,然后使用 approxPolyDP 和 co。用于过滤和寻找候选人,然后使用局部直方图进一步过滤,bla bla bla ...
这或多或少有效,但不完全是我想要的。FindContours 总是返回一个闭合循环,即使 Canny 创建了一条非闭合线。我得到一个轮廓在线条的两侧行走,形成一个循环。对于 Canny 图像(我的标记)上的闭合边缘,我得到 2 个轮廓,一个在内部,另一个在外部。我必须对此操作有问题:
我为每个标记得到 2 个轮廓(没那么严重)
最琐碎的过滤不可用(拒绝非闭合轮廓)
所以我的问题是:是否有可能获得非封闭 Canny 边缘的非封闭轮廓? 或者解决上述两个问题的标准方法是什么?
Canny 是一个非常好的工具,但我需要一种将 2D b/w 图像转换为易于处理的方法。类似于连接组件按组件的步行顺序列出所有像素。所以我可以过滤循环,并将其输入到 approxPolyDP。
更新:我错过了一些重要的细节:标记可以是任何方向(它不是正面朝向相机,没有直角),实际上我正在做的是基于标记的 2D 投影的 3D 方向估计。