Одной из заметных особенностей ваших снимков является белый цвет фона.Все появляется поверх этого, даже это изображение пользователя.Поэтому мы попытаемся сегментировать фон, который оставит нас с меньшими компонентами, такими как значок Instagram, лайки и т. Д. Затем мы выберем самый большой элемент, предполагая, что изображение пользователя является самым большим элементом, присутствующим на экране.Затем мы просто найдем cv2.boundingRect()
наибольшего контура и обрежем снимок соответственно:
import cv2
import numpy as np
img = cv2.imread("/path/to/img.jpg")
white_lower = np.asarray([230, 230, 230])
white_upper = np.asarray([255, 255, 255])
mask = cv2.inRange(img, white_lower, white_upper)
mask = cv2.bitwise_not(mask)
![enter image description here](https://i.stack.imgur.com/KS5Zb.png)
Теперь заполним контуры поиска вэту маску и выберите самую большую.
im, cnt, hierarchy = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
largest_contour = max(cnt, key=lambda x:cv2.contourArea(x))
bounding_rect = cv2.boundingRect(largest_contour)
cropped_image = img[bounding_rect[1]: bounding_rect[1]+bounding_rect[3],
bounding_rect[0]:bounding_rect[0]+bounding_rect[2]]
![enter image description here](https://i.stack.imgur.com/umNdC.png)