Como extrair a região branca de uma imagem

Eu tenho uma imagem de amostra como esta

Estou procurando uma maneira de ocultar o ruído da imagem, de modo que acabe com uma imagem que tenha apenas texto em preto sobre fundo branco, para que eu possa enviá-la para tesseract.

Eu tentei me transformar em

kernel = np.ones((4,4),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow("opening", opening)

mas não parece funcionar.

Eu também tentei encontrar contornos

img = cv2.cvtColor(rotated, cv2.COLOR_BGR2GRAY)
(cnts, _) = cv2.findContours(img, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:1]
for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    roi=rotated[y:y+h,x:x+w].copy()
    cv2.imwrite("roi.png", roi)

Com o código acima, recebo os seguintes contornos:

o que leva a esta imagem quando cortada:

o que ainda não é bom o suficiente. Desejo texto em preto sobre fundo branco, para que eu possa enviá-lo ao tesseract OCR e ter uma boa taxa de sucesso.

Há mais alguma coisa que eu possa tentar?

Atualizar

Aqui está uma imagem similar adicional. Este é um pouco mais fácil porque tem um retângulo suave

questionAnswers(3)

yourAnswerToTheQuestion