我有一个使用OpenCV的应用程序,从办公室内部的网络摄像头(有很多细节)流中获取输入,在其中我需要找到一个人工标记。该标记是白色背景上的黑色正方形。我使用Canny查找边缘和cvFindContours进行轮廓处理,然后使用approxPolyDP等方法进行过滤和查找候选对象,然后使用本地直方图进一步过滤,等等……
这种方法或多或少有效,但并不完全符合我的要求。即使Canny创建了非闭合的线条,FindContours始终返回一个闭合的轮廓。我得到了沿着形成一个循环的线的两侧行走的轮廓。对于Canny图像上的闭合边缘(我的标记),我得到了2个轮廓,一个在内部,另一个在外部。
我有以下两个问题:
每个标记我得到了2个轮廓(不太严重)
最简单的过滤不能使用(拒绝非闭合的轮廓)
所以我的问题是:是否可以针对非闭合的Canny边缘获得非闭合的轮廓? 或者解决上述两个问题的标准方法是什么?
Canny是一个非常好的工具,但我需要一种将2D黑白图像转换为易于处理的内容的方法。例如连接组件,列出元素中的所有像素以便遍历组件。这样我就可以对循环进行过滤,并将其馈送到approxPolyDP中。
更新:我错过了一些重要的细节:标记可以处于任何方向(不是面向相机,没有直角),实际上我正在进行基于标记的2D投影的3D方向估计。