Manipulação de imagens no formato PPM
O artigo seguinte faz uma introdução sobre o formato ".ppm", que faz o armazenamento de forma simples e "bruta" de imagens. Além de como manipular o arquivo, para podermos aplicar filtros de imagem já existentes ou criar nossos próprios filtros.
[ Hits: 32.212 ]
Por: Pablo Margreff em 16/01/2015 | Blog: https://pmargreff.wordpress.com/
void gray_scale(pixel imagem[MAX][MAX], int coluna, int linha) { int i, j; for (i = 0; i < linha; i++){ for (j = 0; j < coluna; j++){ imagem[i][j].r = (int) ((0.299 * imagem[i][j].r) + (0.587 * imagem[i][j].g) + (0.144 * imagem[i][j].b)); //calcula o valor para conversão imagem[i][j].g = imagem[i][j].r; //copia o valor para imagem[i][j].b = imagem[i][j].r; //todas componentes //testa o valor para ver se o mesmo não passou de 255 if (imagem[i][j].r > 255){ imagem[i][j].r = 255; imagem[i][j].g = 255; imagem[i][j].b = 255; } } } }
void autorelevo(pixel imagem[MAX][MAX], int coluna, int linha) { pixel img[linha][coluna]; // cria uma imagem para salvar o resultado do emboss int i, j; for (i = 1; i < linha - 1; i++){ for (j = 0; j < coluna; j++){ img[i][j].r = imagem[i + 1][j].r - imagem[i -1][j].r; //faz a operação passando o img[i][j].g = imagem[i + 1][j].b - imagem[i -1][j].b; //resultado para a matriz de img[i][j].b = imagem[i + 1][j].b - imagem[i -1][j].b; //backup if (img[i][j].r < 0) //testa os limites img[i][j].r = 0; if (img[i][j].g < 0) img[i][j].g = 0; if (img[i][j].b < 0) img[i][j].b = 0; } } for (i = 1; i < linha - 1; i++){ for(j = 0; j < coluna; j++){ imagem[i][j].r = img[i][j].r + 128; //adiciona 128 para clarear a imagem imagem[i][j].g = img[i][j].g + 128; imagem[i][j].b = img[i][j].b + 128; if (img[i][j].r > 255) //testa os limites img[i][j].r = 255; if (img[i][j].g > 255) img[i][j].g = 255; if (img[i][j].b > 255) img[i][j].b = 255; } } }
0 -1 0 0 C 0 0 1 0Onde o pixel central é substituído pela soma do negativo imediatamente acima, e o valor positivo imediatamente abaixo, depois testamos os limites. Lembrando que usamos uma matriz para guardar os resultados, já que se alterarmos o valor imediatamente após realizarmos a conta, haveria interferência, pois usamos os pixeis para calcular os da próxima linha. Depois que tudo é calculado a matriz resposta é passada para a matriz original.
void espelhar(pixel imagem[MAX][MAX], int coluna, int linha) { pixel img[linha][coluna]; int i, j; for (i = 0; i < linha; i++) { for (j = 0; j < coluna; j++) { img[i][j].r = imagem[i][coluna - j].r; //salva em uma matriz do tipo pixel a imagem com suas img[i][j].g = imagem[i][coluna - j].g; //linhas salvas em complementos, isso faz com que a imagem img[i][j].b = imagem[i][coluna - j].b; //pegue o pixel complementar no seu extremo oposto horizontal } } //passa a imagem para a matriz original for (i = 0; i < linha; i++) { for (j = 0; j < coluna; j++) { imagem[i][j].r = img[i][j].r; imagem[i][j].g = img[i][j].g; imagem[i][j].b = img[i][j].b; } } }
Aumentando sua produtividade com o teclado padrão Dvorak
DoTheWorld - Biblioteca completa para manipulação de Arquivos e Pastas em C
Manipulando arquivos em C (parte 2)
Manipulação de arquivos em C++
Manipulando arquivos em C (parte 1)
Criando aplicativos para o Mac OS X no GNU/Linux
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (3)
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta