[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Off] Programa para converter imagem em matrix numerica



Ronaldo Reis Junior escreveu:
Em Qui 23 Ago 2007, Junior Polegato - Linux escreveu:
Ronaldo Reis Junior escreveu:
tenho uma imagem preto e branco de 1000 X 1000 pixels. Preciso
converte-la em uma matrix de texto zeros e uns. Alguem conhece algum
programa em linha de comando que faça isto? Eu estou usando o TNImage
para tal, mas não consigo automatizar o processo, tem que abrir foto por
foto e converter. Valeu
    Posso dar uma idéia: "converta (com 'convert' do ImageMagic) a imagem
para XPM ou ascii, assim ela terá um formato textual. Se realmente é
preto e branco, resultará em duas cores, traduzidas em XPM em dois
caracteres distintos. Assim, basta eliminar da saída o cabeçalho e
caracteres de controle do arquivo. Depois usa o sed para trocar o
caracter que representa o branco por 1 e o preto por 0, se essa for sua
convenção."
    Exemplo com XPM 10x10:
/* XPM */
static char * teste_xpm[] = {
"10 10 3 1",
"       g None",
".      g #FFFFFF",
"+      g #000000",
"..+.......",
".++.......",
".+........",
"+++.......",
"+.++......",
"...++.....",
".......+++",
"......++..",
".....++...",
".....+...."};
sed '1,6d;s/+/0/g;s/\./1/g;s/[",;}]//g' teste.xpm
1101111111
1001111111
1011111111
0001111111
0100111111
1110011111
1111111000
1111110011
1111100111
1111101111
    Agora, se a imagem tiver mais de duas cores (tons de cinza), irá ter
que convertê-la para realmente preto e branco (duas cores), escolhendo
um limite. Talves o convert faça isso, mas fica a seu cargo estudá-lo.
boa ideia, mas agora estou tentando padronizar a geração do XPM via convert. Tenho minha imagem e criei outra via gimp, todas preto e branco. Salvei ambas em png. Mas ao converter para xpm com o seguinte comando:
convert -colors 2 -monochrome teste.png teste.xpm
Um fica com o cabeçalho assim:
/* XPM */
static char *DSC_0005b[] = {
/* columns rows colors chars-per-pixel */
"1000 665 2 1",
"  c black",
". c gray100",
/* pixels */
ou outro fica assim:
/* XPM */
static char *teste[] = {
/* columns rows colors chars-per-pixel */
"20 20 3 1",
"  c black",
". c gray100",
"X c None",
/* pixels */
Meu medo é que cada figura fique com cabeçalho diferente, aí a automatização foi pro saco.
Alguma ideia de como forçar isto no convert? Ainda não achei como.

Olá,

Pelo visto com convert o cabeçalho sempre termina com a linha "/* pixels */", o espaço é preto e o ponto é branco. Assim o sed ficaria:

sed '1,/pixels/d;s/\./0/g;s/ /1/g;s/[",;}]//g' teste.xpm



--
Atenciosamente,

          Junior Polegato

          Um peregrino de problemas; Um pergaminho de soluções!
          Página Profissional: http://www.juniorpolegato.com.br



Reply to: