Déterminer si une image est foncée
Déterminer si une image est foncée
J'aimerais dessiner un cadre autour d'une image mais si l'image est foncée, le cadre sera clair, si l'image est claire, le cadre devra être foncée.
Pour ceux qui tripotent des images (plus que moi), existe-t-il des formules pour déterminer ça, la précision n'a pas un importance capitale, il faut simplement que le cadre soit visible sur le fond.
Merci
Pour ceux qui tripotent des images (plus que moi), existe-t-il des formules pour déterminer ça, la précision n'a pas un importance capitale, il faut simplement que le cadre soit visible sur le fond.
Merci
Même idée que nico, que je salue au passage, mais sans la mise en niveau de gris, vu qu'une moyenne générale de l'image est une mise en niveau de gris indirecte.
Utiliser un quad qui va accumuler les valeurs.
"Piquer" 1000 pixels au hasard de l'image
Couleur est un coef entre 0 et 255.
Utiliser un quad qui va accumuler les valeurs.
"Piquer" 1000 pixels au hasard de l'image
Code : Tout sélectionner
Define Accu.Q
for i = 1 to 1000
X = random(imagewidth(n) - 1)
Y = random(imageheight(n) - 1)
Couleur = point(X, Y)
for j = 1 to 3
Accu + Couleur & $FF
Couleur >> 8
next j
next i
Couleur / 3000
Je pense qu'il vaudra mieu calculer la luminosité sur les bordures seulement de l'image, car elle peut tres bien etre dans l'ensemble tres claire mais avec des bordures foncées.
Il y a pas longtemps j'ai vu un post sur le calcule des teintes / saturation / luminosité, ça devrait t'aider : http://www.purebasic.fr/french/viewtopi ... ght=teinte
Il y a pas longtemps j'ai vu un post sur le calcule des teintes / saturation / luminosité, ça devrait t'aider : http://www.purebasic.fr/french/viewtopi ... ght=teinte
C'est exactement ce que je te disaisDenis a écrit :Merci cederavic (ça fait un bail ...) et ça fait plaisir de te lire à nouveau.
je pensais faire la moyenne mais seulement sur le bord car je me disais que la moyenne sur l'image totale n'était pas forcément le plus adapté pour entourer une image.
Je vais regarder ton lien.

Je pourcours toujours le forum de temps en temps, même si je suis beaucoup moin présent qu'avant...
C'est quelque chose dans ce genre que tu cherche ?
Code : Tout sélectionner
UsePNGImageDecoder()
UseJPEGImageDecoder()
UseTIFFImageDecoder()
UseJPEG2000ImageDecoder()
UseTGAImageDecoder()
Procedure Max(R, G, B)
If R >= G And R >= B
ProcedureReturn R
ElseIf G >= R And G >= B
ProcedureReturn G
ElseIf B >= R And B >= G
ProcedureReturn B
EndIf
EndProcedure
Procedure Min(R, G, B)
If R <= G And R <= B
ProcedureReturn R
ElseIf G <= R And G <= B
ProcedureReturn G
ElseIf B <= R And B <= G
ProcedureReturn B
EndIf
EndProcedure
Procedure.f Luminance(Color)
R = Red(Color) : G = Green(Color) : B = Blue(Color)
Mmax = Max(R, G, B)
Mmin = Min(R, G, B)
Lum.f = (Mmax + Mmin) / 510 * 240
ProcedureReturn Lum
EndProcedure
If LoadImage(0, OpenFileRequester("Charger une image", "", "Image|*.bmp;*.png;*.jpg;*.tga|All|*.*", 0))
ResizeImage(0, 425, 320, #PB_Image_Smooth)
CopyImage(0, 1)
Lum.f
StartDrawing(ImageOutput(0))
For x = 0 To 425
For y = 0 To 5
Lum + Luminance(Point(x, y))
Next
Next
For x = 0 To 425
For y = 315 To 320
Lum + Luminance(Point(x, y))
Next
Next
For x = 0 To 5
For y = 5 To 315
Lum + Luminance(Point(x, y))
Next
Next
For x = 420 To 425
For y = 5 To 315
Lum + Luminance(Point(x, y))
Next
Next
Lum / 10224
Lum = 128 - Lum / 2
StopDrawing()
Color = RGB(Lum, Lum, Lum)
StartDrawing(ImageOutput(1))
Box(0, 0, 425, 5, Color)
Box(0, 315, 425, 5, Color)
Box(0, 5, 5, 315, Color)
Box(420, 5, 5, 315, Color)
StopDrawing()
OpenWindow(#PB_Any, 0, 0, 850, 320, "Contourage", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ImageGadget(0, 0, 0, 425, 320, ImageID(0))
ImageGadget(1, 425, 0, 425, 320, ImageID(1))
Repeat
Delay(20)
Until WindowEvent() = #WM_CLOSE
Else
MessageRequester("Erreur", "Impossible d'ouvrir l'image")
EndIf
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
A la bourre pour la réponse, je tombe sur ce sujet en recherchant autre chose
Moi, avec mes essais sur les images et couleur, pour savoir si c'est clair ou foncé, le plus simple reste de simplement additionné les couches R G B
en gros, si tu as une couleur RGB(124, 255, 64)
Tu ajoutes 124 + 255 + 64
plus la valeur est forte et plus c'est clair.
0 -> noir
765 -> blanc
l'idée du niveau de gris n'est pas bête mais elle ajoute une division par 3 à ce calcul
Donc pour la rapidité, un simple ajout
Moi, avec mes essais sur les images et couleur, pour savoir si c'est clair ou foncé, le plus simple reste de simplement additionné les couches R G B
en gros, si tu as une couleur RGB(124, 255, 64)
Tu ajoutes 124 + 255 + 64
plus la valeur est forte et plus c'est clair.
0 -> noir
765 -> blanc
l'idée du niveau de gris n'est pas bête mais elle ajoute une division par 3 à ce calcul
Donc pour la rapidité, un simple ajout

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]