Bom, apenas para deixar vocês a par do que foi feito após aquele post. Continuei meu belo trabalho e hoje resolvi colocá-lo no Github[1], quem sabe ele não cresce e mais pessoas adicionam novos recursos para ajudar outras a entrar na área de Processamento de Imagens Digitais (PID)?
Quando comecei a fazer o trabalho eu tinha muita informação sobre processamento de imagens, mas pouca coisa em C++ (na verdade a linguagem fui eu quem escolhi, causei minha própria coceira). O pouco que encontrei nesta linguagem não era lá realmente funcional (apenas classes isoladas e etc.).
Quem quiser adicionar filtros, mesmo que simples (média, mediana, etc), é só fazer o fork e me comunicar sobre as mudanças ou então gerar um patch e me enviar.
O que realmente está precisando ser feito:
- Fazer o espectro de Fourier funcionar direito (a transformada está correta, a inversa Ãdem);
- Temporada de caça aos memory leaks! Achei vários e já tratei de corrigir, porém após alguns filtros ele consome muita memória e precisamos fechar e abrir novamente se quisermos nossos recursos de volta.
- Adicionar recursos para trabalhar com imagens coloridas (como o trabalho era para trabalhar com imagens em escala de cinza, apenas isso foi feito) - quando a imagem é colorida, nós a convertemos para escala de cinza;
Abraços!
[1] http://github.com/chjunior/blind-camaleon/tree/master
tags {desenvolvimento, open source, pid}
por Carlos Júnior às 2:49 ◊ Comente »
Este semestre estou cursando uma matéria que se chama Processamento de Imagens Digitais na PUC-MG e, diga-se de passagem, estou gostando muito da matéria. Recebemos então nosso primeiro trabalho prático que consiste em 3 passos, sendo o que primeiro irá gerar a versão em escala de cinza de uma imagem. Considerei esta a oportunidade perfeita para aprender a trabalhar com Qt.
Como o trabalho necessitava de uma interface gráfica (exigência do professor), comecei com o Qt Designer. O programa é realmente muito bom e fácil de mexer! Por usar caixas de ferramentas flutuantes, recomendo o uso de uma área de trabalho somente para o programa.
O segundo passo foi escrever o comportamento da interface, ou melhor, o trabalho de fato. Como este não é um tutorial de Qt vou pular direto para a manipulação da imagem. Escrevi então o seguinte código para deixar a imagem em escala de cinza utilizando a QImage:
void
pidMain::generateGrayScale()
{
// ocultei o código original pois se trata de recuperar o objeto QImage e nada mais
QImage *original = getImage();
QImage *gray = new QImage(original->width(), original->height(), QImage::Format_RGB32);
QRgb grayPix;
QColor *curPix;
int bright;
for (int i =0; i < gray->width(); i++)
for (int j = 0; j < gray->height(); j++)
{
curPix= &QColor::fromRgba(original->pixel(i, j));
bright = qRound(0.3 * curPix->red() + 0.5 * curPix->green() + 0.2 * curPix->blue());
grayPix = qRgb(bright, bright, bright);
gray->setPixel(i, j, grayPix);
}
// também ocultei o código original aqui. Agora temos uma imagem em escala de cinza no ponteiro "gray"
}
Espero que este código seja útil a alguém ! Caso queiram opinar, melhorar, estragar ou qualquer coisa, o código para alteração está aqui !
Abraços!
tags {desenvolvimento, open source, pid}
por Carlos Júnior às 15:57 ◊ 3 comentários »