Remover seção de cabeçalho preto da imagem usando Python OpenCV

Raja:

Eu preciso remover a seção enegrecida em vários partes da imagem usando Python CV. Eu tentei com denoising que não dá resultados satisfatórios.

Por exemplo. I necessário remover a parte enegrecida na Tabela Cabeçalho (abaixo da imagem) e converter o fundo cabeçalho para branco com conteúdos como preto.

digite descrição da imagem aqui

Alguém pode me ajudar com a escolha da biblioteca ou solução correta para superar isso?

nathancy:

Aqui está uma versão modificada do @ do eldesgraciado abordagem para filtrar o padrão pontilhada usando um hit morfológica ou operação perder nos pixels alvo em Python. A diferença é que em vez de subtrair a máscara com a imagem binária que diminui a qualidade do texto, que dilatam a imagem binária, em seguida, bit a bit e para manter a qualidade do texto.

  1. Obter imagem binária. Imagem de carga, em tons de cinza, limiar de Otsu

  2. Execute hit morfológica ou operação perder. Nós criamos um kernel padrão de pontos com cv2.getStructuringElement, em seguida, uso cv2.filter2Da convolve a imagem

  3. Remover pontos. Nós cv2.bitwise-xora máscara com a imagem binária

  4. Fix danificados pixels de texto. Nós cv2.dilate, em seguida, cv2.bitwise_anda máscara finalizado com a imagem de entrada e fundo da cor pixels brancos


imagem binária

digite descrição da imagem aqui

máscara Dot

digite descrição da imagem aqui

remover pontos

digite descrição da imagem aqui

Dilatam para corrigir danificado pixels de texto a partir do processo de thresholding

digite descrição da imagem aqui

Resultado

digite descrição da imagem aqui

Código

import cv2
import numpy as np

# Load image, grayscale, Otsu's threshold
image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Perform morphological hit or miss operation
kernel = np.array([[-1,-1,-1], [-1,1,-1], [-1,-1,-1]])
dot_mask = cv2.filter2D(thresh, -1, kernel)

# Bitwise-xor mask with binary image to remove dots
result = cv2.bitwise_xor(thresh, dot_mask)

# Dilate to fix damaged text pixels
# since the text quality has decreased from thresholding
# then bitwise-and with input image
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
dilate = cv2.dilate(result, kernel, iterations=1)
result = cv2.bitwise_and(image, image, mask=dilate)
result[dilate==0] = [255,255,255]

cv2.imshow('dot_mask', dot_mask)
cv2.imshow('thresh', thresh)
cv2.imshow('result', result)
cv2.imshow('dilate', dilate)
cv2.waitKey()

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=281034&siteId=1
Recomendado
Clasificación