Como remover sublinhados horizontais

Estou tentando extrair texto de algumas centenas de JPGs que contêm informações sobre registros de pena de morte; os JPGs são hospedados pelo Departamento de Justiça Criminal do Texas (TDCJ). Abaixo está um exemplo de trecho com as informações de identificação pessoal removidas.

Eu identifiquei os sublinhados como sendo o impedimento para o OCR adequado - se eu entrar, capture um sub-snippet e linhas manualmente brancas, o OCR resultante através de pytesseract é muito bom. Mas com sublinhados presentes, é extremamente ruim.

Como posso remover melhor essas linhas horizontais? O que eu tentei:

Iniciado no passo a passo do doc do OpenCV:Extraia linhas horizontais e verticais usando operações morfológicas. Fiquei preso muito rápido, porque sei zero C ++.Seguido junto comRemoção de linhas horizontais na imagem - terminou com uma string ilegíveSeguido junto comRemover linhas horizontais / verticais longas da imagem da borda usando o OpenCV - não foi possível obter a intuição por trás do dimensionamento da matriz de zeros aqu

Marcando esta pergunta comc ++ na esperança de que alguém possa ajudar a traduzir a Etapa 5 doasso a passo @docs para Python. Eu tentei várias transformações, como a Hugh Line Transform, mas estou me sentindo no escuro em uma biblioteca e em uma área com a qual não tenho experiência anterior.

import cv2

# Inverted grayscale
img = cv2.imread('rsnippet.jpg', cv2.IMREAD_GRAYSCALE)
img = cv2.bitwise_not(img)

# Transform inverted grayscale to binary
th = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
                            cv2.THRESH_BINARY, 15, -2)

# An alternative; Not sure if `th` or `th2` is optimal here
th2 = cv2.threshold(img, 170, 255, cv2.THRESH_BINARY)[1]

# Create corresponding structure element for horizontal lines.
# Start by cloning th/th2.
horiz = th.copy()
r, c = horiz.shape

# Lost after here - not understanding intuition behind sizing/partitioning

questionAnswers(4)

yourAnswerToTheQuestion