Bonjour,
Vous avez en fait deux sous problèmes :
1. Isoler la phrase.
2. Modifier sa couleur.
1. Pour Isoler une phrase, il suffit de déterminer son rectangle englobant. C'est à dire la partie de l'image qui englobe la phrase. Ce rectangle peut être représenté par deux points (X0,Y0) et (Xf,Xf).
2. Ensuite la modification de la couleur ne se fera uniquement sur le rectangle englobant. Mais c'est une tâche assez délicate car vous n'allez pas modifier tout le rectangle mais uniquement le texte contenu dans le rectangle.
Tout dépend de la couleur initiale du texte et aussi de la qualité de l'image.
En supposant que le texte et noir sur blanc, on aura un algo du genre :
Bien entendu l'égalité parfaite entre la couleur du pixel et la couleur initiale sera corrompu par la qualité de l'image... il serai préférable d'utiliser des approximation au lieu de test d'égalité genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 POUR i = x0 A xf POUR j = y0 A yf SI MonImage[i,j]=CouleurInitiale ALORS MonImage[i,j]=Rouge; FIN FIN FIN
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Si RVBBleu(MonImage[i,j])<20 ET RVBRouge(MonImage[i,j])<20< ET RVBVert(MonImage[i,j])<20 ALORS // Il s'agit d'une couleur très foncée MonImage[i,j]=Rouge;
Maintenant si vous désirez automatiser complètement la tache 1 : Détection automatique de chaque phrase, je pense que vous n'êtes pas dans le bon forum.
Essayez plutôt le Forum Traitement d'images
Salut ,
Je suis venu à certaines des solutions actuellement.
1- je fais un forme rectangle sur ma image puis je le changer le coordonnées de cette rectangle pour positionner bien sur le texte puis fait cette code
FormeRectangle..EffetVisuel=evVoileBleu
voila l'image
et pour b_reda31 merci a votre reponse..Je vais tester vos suggestions
un petite remarque tu as fais MonImage[i,j]=Rouge; est ce que cette variable monimage est un tableau
a tout façon Je vais tester vos solutions...merci beaucoup b_reda31
Oui c'est une bonne idée d'utiliser une forme (un peu transparente) sur l'image afin de permettre à l'utilisateur de choisir lui même le rectangle englobant.1- je fais un forme rectangle sur ma image puis je le changer le coordonnées de cette rectangle pour positionner bien sur le texte puis fait cette code
Dans cette idée, vous pouvez modifier la position et les dimensions de la forme selon les positions du clique et du relâche sur l'objet image.Pour récuperer les positions voir SourisPosX et SourisPosY avec comme paramètre spImage
Ensuite pour ce qui est du changement de couleur du texte,vous devez parcourir tous les pixels du rectangle, et tester si chaque pixel représente du texte (couleur sombre) ou le fond (couleur clair).
Pour cela vous pouvez aussi calculer le niveau de gris du pixel (Moyenne des trois composante R,V,B) si le niveau de gris ng est inférieur à un certain seuil alors il s'agit du texte donc le pixel devient rouge, sinon il s'agit du fond alors ne rien faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 MonImage est une Image; MonImage=IMG_SansNom1; i,j sont des entiers; ng est un entier; POUR i = SAI_X0 A SAI_Xf POUR j = SAI_Y0 A SAI_Yf ng = (RVBBleu(MonImage[i,j])+RVBRouge(MonImage[i,j])+RVBVert(MonImage[i,j]))/3; SI ng<SAI_Seuil ALORS MonImage[i,j]=RougeClair; FIN FIN FIN IMG_SansNom2=MonImage;Non, MonImage est une variable de type Image.un petite remarque tu as fais MonImage[i,j]=Rouge; est ce que cette variable monimage est un tableau
Voici ce que ça donne avec un seuil = 150
Sans être indiscret, pourrais-je savoir quel est l'objectif de cette procédure?
Merci BARAK ALLAH FIK b_reda31 a votre réponse..Je vais tester vos suggestions
Je suis en traîne de faire un projet pour les lecteurs du Coran, tell me la lecteur soient compatibles avec le AYA spécifique (couleur rouge ) du Coran.Sans être indiscret, pourrais-je savoir quel est l'objectif de cette procédure?
Avez-vous des suggestions sur le projet ?
j'ai un question quelle langage tu utilisé?
pour moi c'est Windev
Salut TM
merci b_reda31 j'ai essaie votre proposition mais je obtenu que tout le rectangle est en rouge
j'ai bloqué comment connaitre la couleur de texte pour le changer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 MonImage est une Image MonImage=Image1 i,j sont des entiers; ng est un entier; dDébutDessin(Image1) POUR i = x0 A x1 POUR j = y0 A y1 ng = dPixelCouleur(MonImage,i,j)/3 SI ng < ??? ALORS // quelle est numéro de couleur de noir dPoint(i, j, RougeFoncé) FIN FIN FIN
aide moi b_reda31 et mes amis
Bonsoir,
Je vois que vous avez avancé
Les images que vous avez fournies ne sont pas binaires, c'est à dire elles ne contiennent pas uniquement des Pixels Noirs (absolu) et des Pixels Blancs... ç'aurait été très facile dans ce cas
Dans votre cas, il y a plusieurs nuances du noirs (texte) et plusieurs nuances du blanc (fond) ce qui complique un peu les choses. Mais on peut dire que le texte est d'une couleur sombre et le fond d'une couleur clair. Nous savons aussi que le niveau de gris des couleurs sombres est faible.
Le niveau de gris d'une couleur peut être approché par la moyenne des valeurs de chaque composante (R,V,B) et non pas la couleur par 3. comme vous l'avez fait dans votre code !!
Ce qui revient à :
concernant la valeur du seuil :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 c est un couleur; ng est un entier; POUR i = x0 A x1 POUR j = y0 A y1 c=dPixelCouleur(MonImage,i,j) ng = (RVBBleu(c)+RVBVert(c)+RVBRouge(c))/3 SI ng < ??? ALORS // quelle est numéro de couleur de noir dPoint(i, j, RougeFoncé) FIN FIN FIN
Vous avez deux choix (voire trois) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SI ng < ??? ALORS // quelle est numéro de couleur de noir
1. Soit laisser la valeur du seuil fixe. Dans l'image que je vous ai fournie le seuil était à 150.
Cette solution n'est pas très fiable, car la valeur du seuil optimal est différente d'une image à une autre voire différent au sein d'une même image.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SI ng < 150 ALORS
2. Permettre à l'utilisateur de choisir un seuil et voir le résultat. Par exemple mettre un champ de saisie SAI_Seuil où l'user saisira la valeur du seuil et ensuite on compare par rapport à cette valeur :
3. La troisième méthode est plus compliquée mais plus robuste, il s'agit de développer un algorithme permettant de trouver le seuil optimal (voir Algorithme d'Otsu)... Si vous choisissez cette méthode, nous allons vite être hors sujet et il faudra continuer sur le forum traitement d'image.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SI ng < SAI_Seuil ALORS //Attention ! Le type de champ doit être entier!!
Allez bon courage, je pense que vous allez pouvoir vous en sortir
Avec un seul rectangle cela va englober les deux lignes complètes.
Donc il vaudrait mieux utiliser deux rectangles.
Merci BARAK ALLAH FIK b_reda31 a votre réponse..
Je suis en traîne de faire un projet pour les lecteurs du Coran, tell me la lecteur soient compatibles avec le AYA spécifique (couleur rouge ) du Coran.Sans être indiscret, pourrais-je savoir quel est l'objectif de cette procédure?
Avez-vous des suggestions sur le projet ?
j'ai un question quelle langage tu utilisé?
pour moi c'est Windev
C'est un noble projet. Bonne continuation
Alors si je comprends bien, vous tentez de synchroniser la lecture (sonore) avec la visualisation (Image : Texte rouge).
J'ai remarqué que vous essayez de mettre en rouge toute la aya. Ne serait il pas mieux de le faire par mot ?
Salut TM
vraimentJ'ai remarqué que vous essayez de mettre en rouge toute la aya. Ne serait il pas mieux de le faire par mot ?
Mais cela nécessite des travaux majeurs
Merci pour votre suggestion
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager