OpenCV查找多边形
我正在使用EmguCV并尝试在图像中查找多边形。以下是关于这个问题的一些事实: 1) 多边形的形状是不规则的,但边始终是两个角度中的一个 2) 多边形的边上通常有需要填充的间隙 3) 如果一个多边形包含在另一个多边形中,我想忽略它 以这幅图像为例: 我想找到以红色突出显示的多边形,忽略以绿色突出显示的多边形,并在间隙之间建立连接,如蓝色所示: 我使用HoughLinesBinary取得了一些成功,然后将最近的线段端点相互连接,以桥接间隙来构建一个完整的多边形,但是当涉及多个多边形时,这不起作用,因为如果多边形恰好彼此靠近,它将尝试在多边形之间绘制直线OpenCV查找多边形,opencv,polygon,detection,emgucv,Opencv,Polygon,Detection,Emgucv,我正在使用EmguCV并尝试在图像中查找多边形。以下是关于这个问题的一些事实: 1) 多边形的形状是不规则的,但边始终是两个角度中的一个 2) 多边形的边上通常有需要填充的间隙 3) 如果一个多边形包含在另一个多边形中,我想忽略它 以这幅图像为例: 我想找到以红色突出显示的多边形,忽略以绿色突出显示的多边形,并在间隙之间建立连接,如蓝色所示: 我使用HoughLinesBinary取得了一些成功,然后将最近的线段端点相互连接,以桥接间隙来构建一个完整的多边形,但是当涉及多个多边形时,这不起作
有人有什么想法吗?我想问题可能是你的图像阈值。 我不知道你是怎么做到的,但是如果二值图像更好的话,你可以得到更好的结果 我喜欢您连接多边形段的想法,请尝试确保要连接的线具有最大和最小长度,以避免连接到最近的对象 验证新的线接头是否形成90度角,即使它是一个角 增加: 您可以使用moephologic运算符将直线按一定角度增长。正如你所说的,这些线有已知的角度,使用这样的遮罩进行膨胀 0 0 0 1 1 0 0 0 0
这个遮罩只会沿着直线生长,直到连接到另一边。一般的解决方案将很难,但对于您的特定问题,一个相对简单的启发式方法应该可以奏效 其主要思想是使用墙一侧的白色像素作为附加功能。图像中的墙始终有一个几乎为黑色的一面,另一面有许多白噪声像素。白噪波相对于墙的方向不会打开角,因此使用此信息可以消除线之间的许多可能连接 首先是一些定义: 图片中的所有墙要么从左下到右上(上升线),要么从左上到右下(下降线) 如果下降线的左侧有更多的白色像素,则称之为下降的左墙,否则称为下降的右墙。上升线也一样 每条线以两点结束。调用最左边的一个开始,最右边的一个结束 现在查看算法:
- 对图像中的每条线和每条起点/终点进行分类。
检查每行两侧的直接区域,看看哪一侧包含更多的白色像素。
之后,将有一个标记为“左墙下降起点”、“左墙上升终点”等的点列表 - 对于每个起点/终点:
- 从另一条线查找附近的起点/终点
- 如果是从左墙开始下落,请仅查找:
- 落下的左端墙
- 如果该点位于当前线的左侧,则为上升的左墙起点
- 如果该点位于当前直线的右侧,则为上升的右墙端点
- 在找到的点中拾取最近的点,将其连接到当前点