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.225 ]
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)
DoTheWorld - Biblioteca completa para manipulação de Arquivos e Pastas em C
Manipulação de arquivos em C++
Manipulando arquivos em C (parte 1)
Criação e uso de um interpretador de script BrainFuck em C++
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático
Como impedir exclusão de arquivos por outros usuários no (Linux)
Formas seguras de instalar Debian Sid (10)
Alguém executou um rm e quase mata a Pixar! (6)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (12)
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (5)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (6)









