Чтобы сохранить вашу идею, используя контуры, найденные с помощью cv2.findContours
, вам просто нужно объединить все ваши контуры, например, используя np.vstack
. Так как вам нужны только простые координаты для cv2.minAreaRect
, слияние должно быть в порядке. Чтобы получить четыре вершины повернутого прямоугольника, используйте cv2.boxPoints
. Наконец, рисование можно выполнить с помощью cv2.polylines
.
Вот небольшой фрагмент кода с минимальным примером:
import cv2
import numpy as np
# Some test image
image = 255 * np.ones((300, 300), np.uint8)
cv2.circle(image, (100, 60), 30, 0, 1)
cv2.circle(image, (200, 200), 60, 0, 1)
# Find contours (with respect to OpenCV version); merge them
cnts = cv2.findContours(255-image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = np.vstack(cnts)
# Calculate minAreaRect of merged contours; determine points
pts = np.int32(cv2.boxPoints(cv2.minAreaRect(cnts)))
cv2.polylines(image, [pts], True, 192)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Это будет изображение:
![Output](https://i.stack.imgur.com/7f76P.png)
Надеюсь, это поможет!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
NumPy: 1.18.1
OpenCV: 4.1.2
----------------------------------------