Je dois enlever la section noircie en plusieurs parties de l'image à l'aide de CV Python. J'ai essayé avec débruitage qui ne donne pas de résultats satisfaisants.
Par exemple. Je dois enlever la partie noircie dans le tableau en-tête (image ci-dessous) et convertir le fond d'en-tête en blanc avec le contenu en noir.
aider quelqu'un peut me choisir avec la bibliothèque correcte ou d'une solution pour surmonter cela?
Voici une version modifiée de l'approche @ eldesgraciado pour filtrer le motif pointillé en utilisant un coup morphologique ou opération de manquer sur les pixels cibles en Python. La différence est qu'au lieu de soustraire le masque à l'image binaire qui diminue la qualité du texte, nous dilatons l'image binaire alors logique binaire de conserver la qualité du texte.
Obtenir l' image binaire. Charger l' image, niveaux de gris, seuil de Otsu
Effectuer coup morphologique ou une opération miss. Nous créons un noyau de motif de points avec
cv2.getStructuringElement
ensuite l' utilisationcv2.filter2D
de l'image convoluerRetirer des points. Nous
cv2.bitwise-xor
le masque avec l'image binaireCorrection des pixels de texte endommagé. Nous
cv2.dilate
alorscv2.bitwise_and
le masque finalisé avec les pixels d'image d'entrée et arrière - plan de couleur blanc
image binaire
masque dot
Supprimer points
Dilatent pour fixer les pixels de texte endommagé du processus de seuillage
Résultat
Code
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()