如何获得多个单独形状的组合凸包
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)
完成的)以上是关于如何获得多个单独形状的组合凸包的主要内容,如果未能解决你的问题,请参考以下文章