Já experimentou as ferramentas netpbm? Isso funcionará com o R8G8B8 e outros pedidos RGB de 8 bits.
Para um arquivo raw de ordem RGB de largura 100 a 200 graus:
rawtoppm -rgb 100 200 input.rgb > image.ppm
ppmtorgb3 image.ppm
Agora, você terá 3% de arquivos de mapa cinza no formatopgm
, cada um com sufixos .red
.grn
e .blu
. Esses arquivos .pgm
são quase um formato binário bruto, exceto pelo cabeçalho curto, então:
tail +4 image.red > image_r.raw
tail +4 image.grn > image_g.raw
tail +4 image.blu > image_b.raw
se você realmente quiser os canais brutos assim. Ou, para processamento adicional:
pgmtoppm red image.red > image_red.ppm
pgmtoppm green image.grn > image_grn.ppm
pgmtoppm blue image.blu > image_blue.ppm
Agora você tem três arquivos em formato ppm
, que são os canais RGB separados (consulte também rgb3toppm
). Estes podem ser convertidos para outros formatos usando ppmtoX
, por ex. %código%.
Use " ppmtopng
" em vez da cor no segundo parâmetro para deixar cada uma como uma escala de cinza.
O white
do Imagemagick também pode ser útil, ele também irá lidar com formatos raw RGB, RGBA e 16 bits, e tem uma opção convert
para dividir canais.
for ch in R G B; do
convert -set colorspace RGB -size 100x200 -depth 8 rgb:image.rgb \
-channel ${ch} -separate -depth 8 gray:image_${ch}.raw
done
Verifique se a opção -separate
é apropriada para sua entrada.
As versões mais recentes permitem que você faça isso em um único comando, consulte o link
convert ... -channel RGB -separate gray:image_%d.raw
e R / G / B serão gravados em -set colorspace
files
Nota, o comando
image_0.raw image_1.raw image_2.raw
foi atualizado com base na ajuda e no feedback de Stephane Chazelas , houve várias alterações no comportamento do espaço de cores do ImageMagic-6.7.7 que causam problemas devido ao (eu acredito) sRGB ser usado de RGB.
# colorspace changes mean this works differently after ImageMagick-6.7.6
convert -size 100x200 -depth 8 rgb:image.rgb \
-channel ${ch} -separate -depth 8 gray:image_${ch}.raw