Замена этого фрагмента кода
# Create convex hull
hull = []
for i in range(len(conts)):
# creating convex hull object for each contour
hull.append(cv2.convexHull(conts[i], False))
# Draw contour
cv2.drawContours(img,hull,-1,black,2)
на
# Create convex hull
hull = np.zeros((0, 1, 2), np.int32)
for i in range(len(conts)):
hull = np.concatenate((hull, conts[i]), axis=0)
hull = cv2.convexHull(hull, False)
# Draw contour
cv2.drawContours(img,[hull],-1,black,2)
Я получаю следующий вывод, который, как я полагаю, вам нужен:
Вместо того, чтобы собирать отдельные выпуклые оболочки каждого контура, я собираю все контуры, а затем получаю выпуклую оболочку всех точек контура.
Надеюсь, это поможет!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
NumPy: 1.18.1
OpenCV: 4.2.0
----------------------------------------