• Mutirão

Lab 6 - Juntando tudo

Info

Este roteiro não apresenta nenhum conceito novo. Vocês podem fazê-lo apenas com o que já foi apresentado nos roteiros anteriores. Se você está precisando consultar materiais extras é um sinal de que sua solução é complicada demais.

Info

Você deve fazer tudo do zero. Não há nenhum esqueleto.

Tip 1

Valide visualmente cada exercício antes de prosseguir.

Vamos neste roteiro revisar os conceitos dos dois roteiros anteriores fazendo modificações para tornar seu programa mais legível e organizado.

Exercise 1

Crie um struct imagem que representa uma imagem, como as usadas no Lab1. Esse struct deve ter:

  • um número que representa a largura da imagem;
  • um número que representa a altura da imagem;
  • uma matriz de números que representa os valores dos pixels da imagem.

Por simplicidade, você pode supor que nenhuma imagem usada será maior que 640x480.

Exercise 2

Crie uma função le_imagem que carrega o conteúdo de uma imagem PGM, recebida pelo terminal (lembre que no Lab3 vimos como simular a digitação do terminal através de um arquivo), em um struct imagem. Abra o arquivo cat.pgm em um editor de texto para entender o formato PGM.

Dica: A função deve receber um apontador para um struct imagem e preencher esse struct. Isso significa que o struct não é criado pela própria função, mas por quem chamou a função.

Exercise 3

Crie uma função escreve_imagem que recebe um apontador para um struct imagem e imprime o conteúdo desse struct no terminal, no formato PGM

Dica: Para testar, lembre que no Lab3 vimos como redirecionar os prints para um arquivo.

Exercise 4

Crie uma função limiar que limiariza um struct imagem (tarefa 3 do Lab1).

Dica: para testar, use le_imagem e escreve_imagem.

Warning

Valide sua implementação com os professores ou um colega validado antes de seguir.

Exercícios avançados

Exercise 5

Crop: crie uma função crop que corta uma imagem. Sua função deverá receber dois structs imagem: um para a imagem original e outra para a imagem cortada.

Exercise 6

Borramento: crie uma função blur que faz o borramento de uma imagem. Ela deverá receber dois structs imagem: um contendo a imagem original e um que receberá a imagem processada. Para borrar a imagem compute, para cada ponto, a média entre seu valor e o valor de seus vizinhos (incluindo diagonais).

Exercise 7

Detector de bordas: você pode detectar bordas em uma imagem computando, para cada ponto, a diferença entre 4 vezes seu valor e o valor dos seus vizinhos (sem incluir diagonais).