如何获得多个单独形状的组合凸包

Posted

技术标签:

【中文标题】如何获得多个单独形状的组合凸包【英文标题】:How to obtain combined convex Hull of multiple separate shapes 【发布时间】:2018-09-06 06:39:25 【问题描述】:

我有 2 个形状(图 1),需要找到它们组合的一个凸包(图 2)。更准确地说,我有兴趣获得外角(紫色圆圈图 2)。形状是分离的。我描绘的形状是一块方形透明塑料片,侧面有两条彩色条纹。条纹很容易追踪(inRange)。

我正在考虑的一种快速而肮脏的方法是用白线连接条纹的中心,然后获得凸包。我也在考虑连接两个形状的顶点列表并获得组合的convexHull,但我不确定这种方法是否会使convexHull 函数崩溃。

有没有更优雅的方法来解决这个问题?

请帮忙

图 1

图2

【问题讨论】:

我相信连接顶点不会破坏convexHull。因为这正是该功能的用途。 通过(x+y)(x-y)找到the extermes points,然后画成这样:i.stack.imgur.com/ACV2E.png 【参考方案1】:

问题已解决。

像魅力一样工作。不同形状的连接点不会使凸包崩溃。

我把代码贴在了 GitHub https://github.com/wojciechkrukar/OpenCV/blob/master/RectangleDetector/RectangleDetector.ipynb

这是结果:

这是最重要的代码块:

_ , contours,hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
#size of contour points
length = len(contours)
#concatinate poits form all shapes into one array
cont = np.vstack(contours[i] for i in range(length))

uni_hull = []
uni_hull.append(hull) # <- array as first element of list
cv2.drawContours(image,uni_hull,-1,255,2);

【讨论】:

您忘记包含对convexHull 的实际调用(在这种情况下,它是以hull = cv2.convexHull(cont) 完成的)

以上是关于如何获得多个单独形状的组合凸包的主要内容,如果未能解决你的问题,请参考以下文章

如何将凸包顶点转换为 geopandas 多边形

如何使用Boost获得2D点的凸包面积?

[CodeForces-606E] Freelancer's Dreams 凸包 模型转换

除了蛮力搜索之外,如何在凸包中找到最大的三角形

将凸包转换为二进制掩码

凸包(Convex Hull)构造算法——Graham扫描法