2012-04-24 121 views
4

我尝试通过来自OpenCV的MSER检测来查找图像上的对象。但功能cvExtractMSER回报并不轮廓,但设定点(CvSeq),创造数字:在OpenCV中查找一组点的轮廓

(1, 4), (2, 3), (2, 4), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4), ... 

Area created by set of points

但我只需要轮廓的点:

(1, 4), (8, 4), (8, 1), (4, 1) 

Highlight needed contour points

我如何找到这个轮廓?

我认为,最简单的(但不是最快)的方法是:

  • 平局B/W的所有点图像(如何逐点?)
  • 使用findContours为找到轮廓在新图像上
+1

它已经2年,所以你可能已经有解决你的问题。我遇到了同样的问题。因此,我认为描述MSER返回“轮廓”的OpenCV文档是不正确的: “//在指定图像上运行提取器;返回MSER, //每个编码为轮廓(向量,请参阅findContours) //可选掩码标记搜索MSER的区域(...)“ – 2014-04-16 20:58:57

回答

0

如果我的理解正确,您正在寻找检测到的物体的角落。

您可以遍历您的countours列表并编写简单的逻辑,通过简单的坐标比较来检测4个角

+1

我认为这不是很好的答案。如果他有不同的形状,需要更多的角来制作轮廓呢?简单的逻辑变得不容易写。 – krzych 2012-04-26 08:56:59

+0

也许karlphillip可能意味着说凸包? – rwong 2014-03-04 13:17:05

1

findContours()中的一个选项是传递一个参数,该参数将除去直线水平,垂直或对角线上的端点以外的所有点。如果您创建图像并绘制您列出的点,则findContours()可以为您完成剩下的工作。

CV_CHAIN_APPROX_SIMPLE压缩水平,垂直和对角线段,只留下它们的端点。例如,一个直立的矩形轮廓用4个点编码。

http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours#findcontours

+0

“创建一个图像并画出你列出的点,然后findContours()可以完成剩下的工作” 是的,我认为这是最简单的方法(我在帖子底部写了它)。但我不知道在图像上绘制点序列的快速方式。你可以帮我吗? – 2012-05-07 19:31:59