PIL Meilleure Façon De Remplacer la Couleur?
Je suis en train de retirer une certaine couleur de mon image mais il ne fonctionne pas aussi bien que je l'avais espéré. J'ai essayé de faire la même chose, comme ici, À l'aide de PIL à faire tous les pixels blancs transparents? cependant la qualité de l'image est un peu figé, donc ça laisse un peu de fantôme de l'étrange couleur des pixels autour de l'endroit où ce qui a été retiré. J'ai essayé de faire quelque chose comme changement de pixel si les trois valeurs sont en dessous de 100, mais parce que l'image est de mauvaise qualité les pixels environnants n'étaient même pas noir.
Personne ne sait d'une meilleure façon avec PIL en Python pour remplacer une couleur et tout ce qui l'entoure? C'est probablement la seule à même d'assurer la meilleure façon que je peux penser à supprimer les objets complètement cependant, je ne peux pas penser à une façon de le faire.
L'image a un fond blanc et un texte noir. Disons juste que je veux supprimer le texte entièrement à partir de l'image, sans laisser aucune artefacts derrière.
Apprécierais vraiment quelqu'un de vous aider! Grâce
OriginalL'auteur Cookies | 2009-10-24
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de représenter l'image comme un tableau en 2 dimensions. Cela veut dire faire une liste de listes de pixels, ou la visualisation de la dimension 1 tableau 2d avec quelques petits malins de mathématiques. Ensuite, pour chaque pixel qui est ciblé, vous aurez besoin de trouver tous les pixels environnants. Vous pouvez le faire avec un python générateur ainsi:
Donc, vous pouvez l'utiliser comme ceci:
OriginalL'auteur Benson
La meilleure façon de le faire est d'utiliser la "couleur vers alpha" algorithme utilisé dans Gimp pour remplacer une couleur. Il fonctionnera parfaitement dans votre cas. Je ré-implémenté cet algorithme à l'aide de PIL pour un open source python photo processeur phatch. Vous pouvez trouver la pleine mise en œuvre ici. Ce une pure LIP mise en œuvre et il n'a pas d'autres dépendances. Vous pouvez copier le code de la fonction et de l'utiliser. Voici un échantillon à l'aide de Gimp:
Vous pouvez appliquer la
color_to_alpha
la fonction de l'image en utilisant le noir comme couleur. Puis collez l'image sur une couleur de fond différente pour faire le remplacement.Par ailleurs, cette application utilise le ImageMath module PIL. Il est beaucoup plus efficace que l'accès aux pixels à l'aide de getdata.
EDIT: Voici le code complet:
Vous ne devriez pas essayer d'exécuter le fichier en entier. Il suffit de copier le color_to_alpha fonction elle-même. De toute façon, je suis content que vous avez trouvé une solution qui fonctionne pour vous. Si vous avez besoin d'une solution plus efficace, vous savez où regarder 😉
Je l'ai fait, et il dit d'abord de nom global "OPTIONS" n'est pas défini, alors j'ai copié la partie et ensuite, il dit _t n'est pas défini, mais c'est un module que je n'avais pas. C'est ce que je voulais dire par mess, j'ai essayé de le faire fonctionner mais ne le pouvait pas, la méthode proposée ci-dessous qui ont travaillé pour moi, c'est ok, mais si votre fonction pourrait vraiment prendre tous les pixels du fond de l'image, ce serait sympa. Il y a encore certains qui confondent tesseract.
J'ai mis à jour la solution avec la solution complète. Vous pouvez modifier les couleurs dans les 3 dernières lignes correspondent à ceux que vous voulez.
Merci, ça fonctionne, sauf qu'il laisse toujours derrière un fantôme de pixels contrairement à la solution ci-dessous. Fondamentalement, j'ai un solide de couleur sombre du texte, c'est noir/bleu comme un dégradé à cause de la mauvaise qualité. Je veux garder les objets solides et la suppression de tous les pixels qui l'entourent, qui sont en quelque sorte comme une ombre. Comme ceci: img36.imageshack.us/img36/6963/expuq.jpg je vais jouer avec elle un peu et voir si je peux faire quelque chose pour le travail.. Merci encore!
OriginalL'auteur Nadia Alramli
Utilisation de numpy et PIL:
Cette charge l'image dans un tableau numpy de forme
(W,H,3)
, oùW
est l'la largeur et la
H
est à la hauteur. Le troisième axe de la matrice représente les 3 couleurscanaux,
R,G,B
.Depuis
orig_color
est un n-uplet de longueur 3, etdata
aforme
(W,H,3)
, NumPydiffusions
orig_color
à une matrice de la forme(W,H,3)
pour effectuer la comparaisondata ==
. Le résultat en est un booléen tableau de formeorig_color
(W,H,3)
.(data == orig_color).all(axis = -1)
est un booléen tableau de forme(W,H)
quiest Vrai, où la couleur RVB dans
data
estoriginal_color
.OriginalL'auteur unutbu
OriginalL'auteur Yuda Prawira
Si les pixels ne sont pas facilement identifiables.e.g vous dire (r < 100 et g < 100 et b < 100) aussi ne pas correspondre correctement le noir de la région, cela signifie que vous avez beaucoup de bruit.
Meilleure façon serait d'identifier une région, et le remplir avec la couleur que vous voulez, vous pouvez identifier la région manuellement ou peut être par la détection de contours par exemple http://bitecode.co.uk/2008/07/edge-detection-in-python/
ou plus sophistiqué approche serait d'utiliser la bibliothèque comme opencv (http://opencv.willowgarage.com/wiki/) pour identifier des objets.
OriginalL'auteur Anurag Uniyal
C'est la partie de mon code, le résultat serait comme:
source
cible
OriginalL'auteur Joseph