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: 33.275 ]
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
Manipulando arquivos em C (parte 2)
Manipulação de arquivos em C++
DoTheWorld - Biblioteca completa para manipulação de Arquivos e Pastas em C
Manipulando arquivos em C (parte 1)
Programação com números inteiros gigantes
librePods: liberte seus AirPods em 2026
Bluefin - A nova geração de ambientes de trabalho Linux
Como atualizar sua versão estável do Debian
Instalando e definindo as novas fontes Adwaita no GNOME
Configurar aviso da temperatura da CPU no Conky
Pós-instalação do elementary OS 8.1
Quer auto-organizar janelas (tiling) no seu Linux? Veja como no Plasma 6 e no Gnome
Copiando caminho atual do terminal direto para o clipboard do teclado
Conky não mostra temperaturas da CPU no notebook (15)
Após todos esses anos... youtube! (2)
archlinux resolução abaixou após atualização [RESOLVIDO] (19)
Registro do 'last&qu... errado [RESOLVIDO] (9)
O WiFi não reconhece minha rede depois que o processo de suspensão é r... (2)









