Боюсь, нет простого решения этой проблемы, иначе капчи были бы бесполезны. Вы можете попытаться вручную настроить параметры выбора диапазона в сочетании с некоторой эрозией, но я думаю, что это будет очень трудно автоматизировать для общего случая.
import cv2 as cv
import numpy as np
def on_lb_trackbar(val):
global lb
lb = val
cv.imshow(title, cv.erode(cv.inRange(img,lb,ub),erosion_kernel))
def on_ub_trackbar(val):
global ub
ub = val
cv.imshow(title, cv.erode(cv.inRange(img,lb,ub),erosion_kernel))
img = cv.imread(r'udilN.png',cv.IMREAD_GRAYSCALE)
lb = 0
ub = 255
title = 'Range selection'
erosion_kernel = np.ones((5,3), np.uint8)
cv.namedWindow(title)
cv.createTrackbar('from', title , lb, 255, on_lb_trackbar)
cv.createTrackbar('to', title , ub, 255, on_ub_trackbar)
on_lb_trackbar(0)