Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Transformer une image couleur en gris et en négatif | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Transformer une image couleur en gris et en négatif Dim 24 Mai 2015 - 4:31 | |
| Transformer une image couleur en une image en gris et en négatif. - Voici l’image exemple:
Vous pouvez enregistrer l'image par <CLICK DROIT> puis Enregistrer l'image sous ...
- Voici le résultat du traitement:
- Et voici le code qui réalise cette huitième merveille du monde !
- Code:
-
rem ============================================================================ rem Modifier une image couleur en gris et en négatif rem Par Papydall rem ============================================================================ rem Pour mettre en niveau de gris une image couleur, on change la couleur de rem chaque pixel de l’image en la moyenne des trois composantes r,g,b rem ============================================================================ rem Supposons que le pixel X,Y possède les 3 composantes (R1,G1,B1) rem On calcule la moyenne M = (R1+G1+B1)/3 et on réaffecte à ce pixel les 3 rem nouvelles composantes (M,M,M) rem Exemple : rem Un pixel a pour couleur (0,100,80) rem La moyenne est M = (0+100+80)/3 = 60 rem On réaffecte à ce pixel les 3 composantes (60,60,60) rem ============================================================================ rem Pour changer une image couleur en négatif, on remplace les 3 composantes rem (R1,G1,B1) par leur complément à 255 rem Exemple : rem Un pixel a pour couleur (2,100,200) rem Les compléments à 255 sont 255-2 = 253 ; 255-100 = 155 ; 255-200 = 55 rem On réafecte à ce pixel les 3 composantes (253,155,55)
rem ============================================================================ Init() Traitement(10) show 15 : show 25 : show 20 : show 30 caption 0, "Terminé" end rem ============================================================================ SUB Init() dim l,h,t$ width 0,750 : height 0,650 alpha 5 : top 5 , 5 : left 5,100 : font_size 5,14:caption 5,"Image de départ" Picture 10 :width 10,350 :height 10,260:top 10,30 : left 10,10 alpha 15 : top 15 , 5 : left 15,400 : font_size 15,14:caption 15,"Image en gris" : hide 15 Picture 20 :width 20,350 :height 20,260:top 20,30 : left 20,370 : hide 20 alpha 25 : top 25 , 300 : left 25,100 : font_size 25,14:caption 25,"Image en négatif" : hide 25 Picture 30 :width 30,350 :height 30,260:top 30,330 : left 30,10 : hide 30 file_load 10,"c:\users\acer\desktop\Image.jpg" : pause 10 l = 346 : h = 260 : ' dimensions de l'image en pixels t$ = "Veuillez patienter .... Traitements en cours ..." END_SUB rem ============================================================================ SUB Traitement(p) dim_local x,y,r,g,b ,r1,g1,b1 ,moyenne for x = 1 to l for y = 1 to h caption 0,t$ + str$(l) + " / " + str$(h) + " ===> " + str$(x) + " / " + str$(y) r = color_pixel_red(p,x,y) g = color_pixel_green(p,x,y) b = color_pixel_blue(p,x,y) moyenne = int((r+g+b) /3) Copy_Picture(20,x,y,moyenne,moyenne,moyenne) : ' Image en gris r1 = 255 - r : g1 = 255 - g : b1 = 255 - b Copy_Picture(30,x,y,r1,g1,b1) : ' Image en négatif if scancode <> 0 then exit_sub next y next x END_SUB rem ============================================================================ SUB Copy_Picture(p,x,y,r,g,b) 2d_target_is p : 2d_pen_color r,g,b : 2d_point x,y END_SUB rem ============================================================================
Ne soyez pas trop impatient pour voir le résultat. Le traitement peut durer un certain temps selon les dimensions de l'image. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Transformer une image couleur en gris et en négatif Dim 24 Mai 2015 - 9:47 | |
| Bravo et ça pourrait être le début d'une série de programmes et d'un article sur le traitement d'images avec différents traitement comme les flous, etc ... ? | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Transformer une image couleur en gris et en négatif Dim 24 Mai 2015 - 9:48 | |
| Bonjour papydall, pour transformer une image en noir et blanc, il y a mieux que de faire la moyenne des composants RGB. Suppose que tu veux transformer ces 3 points colorés: 210,0,0 0,210,0 0,0,210 leur moyenne donnera: 70,70,70 70,70,70 70,70,70 soit 3 gris identiques. Pour récupérer la luminance d'une couleur, il existe une équation: Y = 0,299⋅R + 0,587⋅G + 0,114⋅B Elle est extraite de l'espace colorimétrique YUV, plus de détail ici: YUVMais visuellement, la différence est faible avec le moyennage des composantes RGB. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Transformer une image couleur en gris et en négatif Dim 24 Mai 2015 - 10:35 | |
| Merci Silverman. Dans tous les cas, on peut proposer l'option et l'utilisateur peut choisir le résultat qui lui convient le mieux. On rentre vraiment dans le traitement de l'image par filtre avec des équations différentes. On doit pouvoir aussi à peine modifier le programme pour faire la même chose en sépia. Un grand classique mais hyper simple à faire est de séparer les composants R, V et B. Certains s'en servent aussi pour coder de l'information sur un des canaux avec des valeurs non signifiquatives au niveau de l'image.
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Transformer une image couleur en gris et en négatif Dim 24 Mai 2015 - 15:42 | |
| Salut tout le monde. Merci Jicehel. Merci Silverman On peut aussi jouer sur la luminosité (BRIGHTNESS), le contraste (CONTRAST) et le gamma (GAMMA) du PICTURE. Ces trois commandes font partie de Panoramic. - Code:
-
dim i picture 1 : full_space 1 file_load 1,"c:\users\acer\desktop\image.jpg" ' pause 1000 for i = 1 to 10 gamma 1,i contrast 1,i brightness 1,i : pause 200 next i
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 24 Mai 2015 - 17:10 | |
| @ Papydall Bravo ! | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Transformer une image couleur en gris et en négatif Dim 24 Mai 2015 - 20:02 | |
| Je pense que Silverman voulait parler de HSV/HSL... ex: L'image (j'ai réduit les dimensions) : - Code:
-
rem ============================================================================ rem Modifier une image couleur en gris et en négatif rem Par Papydall rem ============================================================================ rem Pour mettre en niveau de gris une image couleur, on change la couleur de rem chaque pixel de l’image en la moyenne des trois composantes r,g,b rem ============================================================================ rem Supposons que le pixel X,Y possède les 3 composantes (R1,G1,B1) rem On calcule la moyenne M = (R1+G1+B1)/3 et on réaffecte à ce pixel les 3 rem nouvelles composantes (M,M,M) rem Exemple : rem Un pixel a pour couleur (0,100,80) rem La moyenne est M = (0+100+80)/3 = 60 rem On réaffecte à ce pixel les 3 composantes (60,60,60) rem ============================================================================ rem Pour changer une image couleur en négatif, on remplace les 3 composantes rem (R1,G1,B1) par leur complément à 255 rem Exemple : rem Un pixel a pour couleur (2,100,200) rem Les compléments à 255 sont 255-2 = 253 ; 255-100 = 155 ; 255-200 = 55 rem On réafecte à ce pixel les 3 composantes (253,155,55)
rem ============================================================================
Init() wait 100 Traitement(10) show 15 : show 20 : show 35:show 40 caption 0, "Terminé" end rem ============================================================================ SUB Init() dim l,h,t$ width 0,750 : height 0,650 l = 267 : h = 200 : ' dimensions de l'image en pixels alpha 5 : top 5 , 5 : left 5,100 : font_size 5,14:caption 5,"Image de départ" Picture 10 :width 10,l :height 10,h:top 10,30 : left 10,10
alpha 15 : top 15 , 5 : left 15,400 : font_size 15,14:caption 15,"Image en gris (TSL)" : hide 15 Picture 20 :width 20,l :height 20,h:top 20,30 : left 20,370 : hide 20
alpha 35 : top 35 , 300 : left 35,400 : font_size 35,14:caption 35,"Image en gris (moyenne)" : hide 35 Picture 40 :width 40,l :height 40,h:top 40,330 : left 40,370 : hide 40
file_load 10,"Image2.jpg" : pause 10 t$ = "Veuillez patienter .... Traitements en cours ..."
DIM cR%,cG%,cB%, cH,cS,cL END_SUB rem ============================================================================
SUB Traitement(p) dim_local x,y,r,g,b ,r1,g1,b1 ,moyenne for x = 1 to l caption 0,t$ + str$(int(x*1000/l)/10)+"%" for y = 1 to h r = color_pixel_red(p,x,y) g = color_pixel_green(p,x,y) b = color_pixel_blue(p,x,y) moyenne = int((r+g+b) /3) Copy_Picture(40,x,y,moyenne,moyenne,moyenne) : ' Image en gris RGB2HSL(r,g,b) ' cS=0 : ' On supprime la saturation pour faire du noir et blanc HSL2RGB(cH,0,cL) Copy_Picture(20,x,y,cR%,cG%,cB%) : ' Image en gris if scancode <> 0 then exit_sub next y next x END_SUB
rem ============================================================================ SUB Copy_Picture(p,x,y,r,g,b) 2d_target_is p : 2d_pen_color r,g,b : 2d_point x,y END_SUB
rem ============================================================================ SUB HSL2RGB(H,S,L) DIM_LOCAL c,x,m DIM_LOCAL r,g,b c = (1 - ABS(2 * L -1))*S x = c * (1 - ABS(MOD((H/60),2)-1)) m = L - (c / 2) SELECT (INT(H/60)) CASE 0 r = c : g = x : b = 0 CASE 1 r = x : g = c : b = 0 CASE 2 r = 0 : g = c : b = x CASE 3 r = 0 : g = x : b = c CASE 4 r = x : g = 0 : b = c CASE 5 r = c : g = 0 : b = x END_SELECT cR%=(r+m)*255 cG%=(g+m)*255 cB%=(b+m)*255 END_SUB
rem ============================================================================
SUB RGB2HSL(R,G,B) DIM_LOCAL var_R,var_G,var_B DIM_LOCAL var_Min,var_Max,del_Max DIM_LOCAL del_R,del_G,del_B var_R = (R / 255) var_G = (G / 255) var_B = (B / 255)
var_Min = min(min( var_R, var_G), var_B ) var_Max = max(max( var_R, var_G), var_B ) del_Max = var_Max - var_Min
' Calcul de la luminance cL = ( var_Max + var_Min ) / 2
if (del_Max = 0) cH = 0 : cS = 0 else ' Calcul saturation if (cL < 0.5) cS = del_Max / ( var_Max + var_Min ) else cS = del_Max / ( 2 - var_Max - var_Min ) end_if ' Calcul de la teinte if ( var_R = var_Max ) cH = (var_G - var_B) / (var_Max-var_Min) else if ( var_G = var_Max ) cH = 2+(var_B-var_R)/(var_Max-var_Min) else cH = 4+(var_R - var_G)/(var_Max-var_Min) end_if end_if ' conversion en degres cH =int(cH*60) end_if END_SUB
L'image est plus fine en traitement HSL mais qu'est ce que c'est long en langage interprété... Apres verif, on obtient la meme chose. Avec un damier #FF0000,00FF00,0000FF le resultat dans les 2 cas est un gris uniforme... | |
| | | Contenu sponsorisé
| Sujet: Re: Transformer une image couleur en gris et en négatif | |
| |
| | | | Transformer une image couleur en gris et en négatif | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |