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

Jad*_*ift 3 c++ python opencv

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

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

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

请帮忙

图1

在此输入图像描述

图2

在此输入图像描述

Jad*_*ift 6

问题解决了。

奇迹般有效。不同形状的连接点不会破坏凸包。

我在 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))
hull = cv2.convexHull(cont)
uni_hull = []
uni_hull.append(hull) # <- array as first element of list
cv2.drawContours(image,uni_hull,-1,255,2);
Run Code Online (Sandbox Code Playgroud)

  • 您忘记包含对“convexHull”的实际调用(在本例中为“hull = cv2.convexHull(cont)”) (2认同)