Estou tentando seguir a solução detalhada nesta questão para preparar um conjunto de dados para treinar um CRNN para HTR (Handwritten Text Recognition). Estou usando o eScriptorium para ajustar a segmentação e transcrição de texto, exportando no formato ALTO (um XML com coordenadas de região de texto para cada imagem) e analisando o ALTO XML para capturar as regiões de imagem de texto e exportá-las individualmente para criar um conjunto de dados.
O problema que estou encontrando é que tenho a região definida no eScriptorium, assim:
Mas quando aplico este código da solução selecionada para a questão vinculada acima:
# Initialize mask
mask = np.zeros((img.shape[0], img.shape[1]))
# Create mask that defines the polygon of points
cv2.fillConvexPoly(mask, pts, 1)
mask = mask > 0 # To convert to Boolean
# Create output image (untranslated)
out = np.zeros_like(img)
out[mask] = img[mask]
e exibir a imagem, obtenho algumas partes da região de texto preenchidas :
Como você pode ver, algumas áreas que deveriam estar dentro da máscara estão preenchidas e, portanto, os pixels da imagem nelas não são copiados. Eu me certifiquei de que os pixels que formam o polígono foram corretamente analisados e entregues ao OpenCV para construir a máscara. Não consigo encontrar o motivo pelo qual essas áreas estão preenchidas e gostaria de saber se alguém teve um problema semelhante e conseguiu descobrir o motivo ou como evitá-lo.
AIT
Você chamou
cv.fillConvexPoly()
. Seu polígono não é convexo . O algoritmo assumiu que ele era convexo e tomou alguns atalhos para simplificar o código de desenho, então saiu errado.Use
cv.fillPoly()
em vez disso. Isso desenhará polígonos não convexos corretamente.Como você ressalta, as assinaturas de função não são compatíveis com drop-in.
fillPoly()
funciona em uma lista de polígonos, enquantofillComplexPoly()
pega apenas um único polígono.Cada polígono deve ser uma matriz numpy de formas
(N, 1, 2)
e provavelmente precisa ser um inteirodtype
também, embora eu não tenha certeza sobre isso agora e possa suportar o tipo de ponto flutuante no futuro .