Subconjuntos de média de imagens com imagemagick, iterativamente

1

Eu tenho cem imagens e quero calcular a média delas 5 por vez.

O comando imagemagick para os primeiros 5 é:

convert -background transparent %d.jpg[1-5] -average output1.jpg

O comando imagemagick para o segundo 5 é:

convert -background transparent %d.jpg[2-6] -average output2.jpg

O comando imagemagick para o terceiro 5 é:

convert -background transparent %d.jpg[3-7] -average output3.jpg

Como posso fazer isso no Windows por meio de programação? Em outras palavras, posso escrever um arquivo em lotes para executar o imagemagick para fazer isso com um loop? Ou existe uma linguagem / método / alternativa melhor?

    
por aquagremlin 02.05.2013 / 21:24

2 respostas

1

Isso deve ser fácil de fazer com um arquivo em lote como o seguinte:

@echo off
setlocal enabledelayedexpansion
for /l %%f in (1,1,5) do (
    set /a cnt=%%f+4

    REM If the output looks ok, remove the "echo" from the following line to actually run convert
    echo convert -background transparent %%d.jpg[%%f-!cnt!] -average output%%f.jpg
)
endlocal

Aqui está a saída com o "echo" em vigor:

convert -background transparent %d.jpg[1-5] -average output1.jpg
convert -background transparent %d.jpg[2-6] -average output2.jpg
convert -background transparent %d.jpg[3-7] -average output3.jpg
convert -background transparent %d.jpg[4-8] -average output4.jpg
convert -background transparent %d.jpg[5-9] -average output5.jpg

Dica: Certifique-se de especificar o caminho completo para o convert.exe do imagemagick, caso contrário, o comando convert do Windows (converte um volume FAT em NTFS) provavelmente será executado por padrão.

    
por 03.05.2013 / 22:38
0

Aqui está o código que eu montei e que funciona como um arquivo de lote do Windows para milhares de imagens:

  1. rem we will combine 5 images
  2. set /a U=0
  3. set /a V=1
  4. set /a W=2
  5. set /a X=3
  6. set /a Y=4
  7. rem we will only look at the first 15 images
  8. set /a terminator=15
  9. :loop
  10. set /a W= %W% + 1
  11. set /a V= %V% + 1
  12. set /a U= %U% + 1
  13. set /a X= %X% + 1
  14. set /a Y= %Y% + 1
  15. if %Y%==%terminator% goto close
  16. goto open
  17. :close
  18. pause
  19. exit
  20. :open
  21. convert %%d.jpg[%U%-%Y%] -average -auto-level %U%out.jpg
  22. goto loop

Existe algum negócio engraçado usando um for next loop, onde é preciso lembrar de definir a expressão local atrasada e usar o caractere bang ( ! ) ao redor do nome da variável, em vez de sinais de porcentagem. Eu aprendi isso independentemente antes de voltar aqui e ver que você havia resolvido a minha pergunta. Um simples goto com um loop é mais transparente, embora o comando for seja mais elegante.

    
por 05.05.2013 / 03:02