Une image en niveaux de gris

 

ulis, 25-01-2005. Voici un petit script pour voir les couleurs en gris.


Pourquoi

Pour répondre à une demande de Miko. Qui voulait autre chose...


Comment

  Le gris s'obtient en remplaçant les composants RGB par leur moyenne :
  Xrgb = (Xr + Xg + Xb) / 3        # teinte moyenne

Le script

  proc gray {img omg} \
  {
    set idata [$img data]
    set maxrow [llength $idata]
    set maxcol [llength [lindex $idata 0]]
    for {set i 0} {$i < $maxrow + 1} {incr i} \
    { for {set j -1} {$j < $maxcol + 1} {incr j} { set er($i,$j) 0 } }
    for {set nrow 0} {$nrow < $maxrow} {incr nrow} \
    {
      set irow [lindex $idata $nrow]
      set orow {}
      for {set ncol 0} {$ncol < $maxcol} {incr ncol} \
      {
        set nrow1 [expr {$nrow + 1}]
        set ncol1 [expr {$ncol + 1}]
        set ncol2 [expr {$ncol - 1}]
        set ipix [lindex $irow $ncol]
        set r 0x[string range $ipix 1 2]
        set g 0x[string range $ipix 3 4]
        set b 0x[string range $ipix 5 6]
        set c [expr {round(($r + $g + $b) / 3.0)}]
        set cx [format %2.2x $c]
        set opix #$cx$cx$cx
        lappend orow $opix
      }
      lappend odata $orow
    }
    $omg put $odata
  }

Le test

  package require Tk
  package require Img

  # image7.png : http://wfr.tcl.tk/fichiers/ulis/image7.png
  image create photo img -file image.jpg
  image create photo omg
  gray img omg
  set width [image width img]
  set height [image height img]
  canvas .c -bd 0 -highlightt 0 \
    -width [expr {$width * 2}] -height $height
  .c create image 0 0 -anchor nw -image img
  .c create image $width 0 -anchor nw -image omg
  pack .c

Voir aussi


Discussion

GM, 28-03-09

Pour tenir compte de la transparence, il suffit d'ajouter à la fin su script (après "$omg put $odata"):

  set nrow [image height $img]
  set ncol [image width $img]
  for {set i 0} {$i < $nrow} {incr i} {
    for {set j 0} {$j < $ncol} {incr j} {
      set t [$img transparency get $j $i]
      if { $t } {
        $omg transparency set $j $i $t
        }
      }
    }

Catégorie Exemple | Catégorie Traitement d'image