#include #include #include #define LIN 1540 #define COL 2050 #define DIF 4 struct Registro { int lin; int col; int max_val; char comentario[100]; char tipo[3]; }; typedef struct Registro registro; struct Rgb { int r; int g; int b; }; typedef struct Rgb cores; int aux[LIN][COL]; int mat[LIN][COL]; registro reg; int fundo; /* *********************************************************************************************** */ char conectar(FILE **arq,char *nome,char *opc) { /*Estou supondo que a opc é válida*/ *arq=fopen(nome,opc); if(*arq!=NULL) return 1/*verdadeiro*/; else return 0/*falso*/; } //Media ponderada das cores primarias /* *********************************************************************************************** */ int gray (int r ,int g, int b) { int valor; valor = (r*(0.3)) + (g*(0.59)) + (b*(0.11)); return(valor); } //ler os arquivos de imagens /* *********************************************************************************************** */ void inicializar(char *nome_arq) { int r,g,b; int i,j; FILE* arq; if (conectar(&arq,nome_arq,"r")) { fscanf(arq,"%s",®.tipo); fscanf(arq,"\n"); fscanf(arq,"%[^\n]",®.comentario); fscanf(arq,"%d %d ",®.col,®.lin); fscanf(arq,"%d",®.max_val); for(i=0;i= valor_mat) resul=num - valor_mat; else resul=valor_mat - num; return(resul); } //procedimento que identifica cada pixel como fronteira /* ***********************************************************************************************/ void verificar_fronteiras(int i,int j) { int achou; achou=0; if((diferenca(mat[i+1][j],i,j)>DIF) && (diferenca(mat[i-1][j],i,j) > DIF) && (diferenca(mat[i][j+1],i,j)>DIF) && (diferenca(mat[i][j-1],i,j)>DIF)) achou=1; else if( (diferenca(mat[i+1][j+1],i,j)>DIF) && (diferenca(mat[i+1][j-1],i,j) > DIF) && (diferenca(mat[i-1][j+1],i,j)>DIF) && (diferenca(mat[i-1][j-1],i,j)>DIF)) achou=1; if (achou) aux[i][j]=0; } //procedimento que gera um nova imagem apenas com fronteiras /* ***********************************************************************************************/ void bordas() { int j,i,valor; fundo = freg(1000,100); for(i=0 ;i0) && (i<(reg.lin-1))) if ((j>0) && (j<(reg.col-1))) if ((fundo -10) > mat[i][j]) verificar_fronteiras(i,j); } salvar_alteracao("bordas5.pgm"); } /*********************************************************************************************** */ int main() { char nome[20]; int i; printf("********diga o nome do arquivo que deseja trabalhar em ppm********\n"); scanf("%s",&nome); inicializar(nome); do { system("cls"); printf ("\n\n*****Escolha a opção desejada******:\n\n"); printf ("\t(1)...achar bordas\n"); printf ("\t(2)...transformar o formato PPM em PGM\n"); printf ("\t(3)...escolher outro arquivo\n"); printf ("\t(4)...sair do programa\n"); scanf("%d",&i); switch (i) { case 1:bordas(); break; case 2:transformar_ppm_png(); break; case 3:{ printf("diga o nome do arquivo\n"); scanf("%s",&nome); inicializar(nome); } break; } } while ((i!=4)); }