perl colors imagemagick getpixel

Perl & Image:: Magick, obteniendo valores de color por píxel



colors imagemagick (2)

Estoy usando Perl y el módulo Image :: Magick para procesar algunos archivos JPEG.

Estoy usando el sub GetPixels para obtener los componentes RGB de cada píxel.

p.ej

my @pixels = $img->GetPixels( width => 1, height => 1, x => 0, y => 0, map => ''RGB'', #normalize => 1 ) print Dumper /@pixels; $img->Resize( width => 1, height => 1, filter => ''Lanczos'' ); @pixels = $img->GetPixels( width => 1, height => 1, x => 0, y => 0, map => ''RGB'', #normalize => 1 ); print Dumper /@pixels; $img->Write(''verify.jpg'');

He encontrado que getPixels devuelve dos bytes por canal, por ejemplo

$VAR1 = [ 46260, 45232, 44975 ]; $VAR1 = [ 58271, 58949, 60330 ];

Antes de la llamada a Redimensionar: (en este ejemplo), el color del píxel designado es # b4b0af, y los valores devueltos son 0xB4B4, 0xB0B0, 0xAFAF. No entiendo por qué es esto, pero puedo manejarlo usando MOD 256;

Pero después de la llamada a Resize, los valores devueltos no se corresponden de ninguna manera obvia con los valores reales que encuentro en el archivo de salida (verify.jpg).

¿Image :: Magick es súper preciso (considerando los cortos en lugar de los bytes)?
¿Y la compresión JPEG toma en cuenta la discrepancia entre la segunda salida de Dumper y el contenido de ''verify.jpg''?


La compresión JPEG es con pérdida, por lo que no hay correspondencia directa entre los valores de píxel antes de guardar y los píxeles en la imagen comprimida. Tendría que cargar la nueva imagen si quiere saber cómo la modificó.


Lea todo sobre los colores en ImageMagick , incluida su profundidad cuántica:

ImageMagick se puede compilar para admitir píxeles de 32 o 64 bits de tipo PixelPacket. Esto está controlado por el valor de la definición de Profundidad Cuántica. El valor predeterminado es píxeles de 64 bits, que proporciona la mejor precisión.

También es posible que desee leer sobre cómo se reduce el color .