Вот метод, использующий пороговое значение + извлечение контура
- Оттенки серого, затем размытие по Гауссу
- Порог Оцу для двоичного изображения
- Расширение для соединения в один контур
- Извлечение ROI с нарезкой кусочков
После преобразования в оттенки серого и размытие по Гауссу мы используем порог Оцу
![image](https://i.stack.imgur.com/jwPSR.png)
Теперь у нас естьнужный объект переднего плана в белом, поэтому мы расширяем, чтобы соединить контуры, чтобы сформировать единый контур
![image](https://i.stack.imgur.com/YSt0d.png)
Наконец мы получаем координаты ограничивающего прямоугольника и извлекаем ROI
![image](https://i.stack.imgur.com/L0MGt.png)
import cv2
# Grayscale, Blur, Otsu's threshold then dilate
image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25,25))
dilate = cv2.dilate(thresh, kernel, iterations=3)
# Extract ROI
x,y,w,h = cv2.boundingRect(dilate)
ROI = image[y:y+h, x:x+w]
cv2.imshow('thresh', thresh)
cv2.imshow('dilate', dilate)
cv2.imshow('ROI', ROI)
cv2.waitKey()