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.377 ]
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
Manipulação de arquivos em C++
Manipulando arquivos em C (parte 1)
Manipulando arquivos em C (parte 2)
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
VMs e Interfaces de Rede desapareceram (12)
Instalação do drive do adaptador wiffi (7)