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.086 ]
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)
Mais sobre recursividade em C/C++
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Secure boot, artigo interessante, nada técnico. (0)
Preciso recuperar videos *.mp4 corrompidos (1)
\Boot sem espaço em disco (Fedora KDE Plasma 42) (6)









