Вот как бы я это сделал. Код, который выполняет cv2.imwrite()
, предназначен только для отладки, поэтому вы можете увидеть различные этапы, и я поместил временные промежуточные изображения в места их создания, но вы можете просто взять все куски кода и сложить их вместе, чтобы сделать один непрерывный фрагмент кода:
#!/usr/bin/env python3
import cv2
import numpy as np
# Load image
im = cv2.imread('wavy.png')
copy = im.copy()
# Flood fill with white starting from 10,10
cv2.floodFill(copy,mask=None,seedPoint=(10,10),newVal=(255,255,255))
cv2.imwrite('temp1.png',copy)
![enter image description here](https://i.stack.imgur.com/X2l6c.png)
# Make everything not white into black
copy[~np.all(copy == (255, 255, 255), axis=-1)] = (0,0,0)
cv2.imwrite('temp2.png',copy)
![enter image description here](https://i.stack.imgur.com/1POio.png)
# Make white all the bits we don't want at the bottom of the original image
im[:] |= ~copy
# Crop/trim part we want
Ynonzero, Xnonzero, _ = np.nonzero(copy)
res = im[np.min(Ynonzero):np.max(Ynonzero), np.min(Xnonzero):np.max(Xnonzero)]
# Save result
cv2.imwrite('result.png',res)
![enter image description here](https://i.stack.imgur.com/urb4P.png)