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

Python 如何获得多个独立形状的组合凸包,python,c++,opencv,Python,C++,Opencv,我有两个形状(图1),需要找到两个形状的组合(图2)。更确切地说,我对获得外角感兴趣(紫色圆圈图2)。这些形状是分离的。我追踪的形状是一个方形的透明塑料片,侧面有两条彩色条纹。条纹很容易追踪(在范围内) 我正在考虑的一种快速而肮脏的方法是,用一条白线连接条纹的中心,然后获得凸出线。我也在考虑将两种形状的顶点列表连接起来,并获得组合的convexHull,但我不确定这种方法是否会破坏convexHull函数 有没有更优雅的方法来解决这个问题 请帮忙 图1 图2 问题已解决。 工作起来很有魅力。单

我有两个形状(图1),需要找到两个形状的组合(图2)。更确切地说,我对获得外角感兴趣(紫色圆圈图2)。这些形状是分离的。我追踪的形状是一个方形的透明塑料片,侧面有两条彩色条纹。条纹很容易追踪(在范围内)

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

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

请帮忙

图1

图2


问题已解决。

工作起来很有魅力。单独形状的连接点不会导致凸出

我在GitHub上发布了代码

结果是:

下面是最重要的代码块:

_ , 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);
\u轮廓,hier=cv2.查找轮廓(阈值,cv2.RETR\u外部,cv2.链近似\u简单)
#等高线点的大小
长度=长度(轮廓)
#凝聚点将所有形状形成一个阵列
cont=np.vstack(范围(长度)内i的轮廓[i]
统一船体=[]

统一外壳。附加(外壳)#问题已解决。

工作起来很有魅力。单独形状的连接点不会导致凸出

我在GitHub上发布了代码

结果是:

下面是最重要的代码块:

_ , 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);
\u轮廓,hier=cv2.查找轮廓(阈值,cv2.RETR\u外部,cv2.链近似\u简单)
#等高线点的大小
长度=长度(轮廓)
#凝聚点将所有形状形成一个阵列
cont=np.vstack(范围(长度)内i的轮廓[i]
统一船体=[]

uni_hull.append(hull)#我相信连接顶点不会破坏
convexHull
。因为这正是函数的作用。通过
(x+y)
(x-y)
查找
外部点
,然后像这样绘制:我相信连接顶点不会破坏
凸形
。因为这正是函数的作用。通过
(x+y)
(x-y)
查找
外部点
,然后像这样绘制:您忘记了包含对
ConvxHull
的实际调用(在本例中是作为
hull=cv2.ConvxHull(cont)
执行的,您忘记了包含对
ConvxHull
的实际调用(在这种情况下,按
hull=cv2.convxhull(cont)