bem, eu gostava de saber se alguém aqui sabe programar, programar em matlab , é que estou a fazer um projecto e precisava de ajuda, pois a minha experiência com programação não é muita...
caso saibam alguém, por favor digam (:
comprimentos,
Tiago

Que irá ler o conteúdo (pixels) do ficheiro "exemplo.pgm" e gravar numa variável de nome "matriz_imagem" (o matlab gera uma matriz com as mesmas dimensões Comprimento x Largura da imagem "exemplo.pgm")matriz_imagem = imread('exemplo.pgm');
Precisas de escrever a função que será responsável por abrir o ficheiro, ler o seu conteúdo e gravar essa informação na estrutura de nome "IR_Image" acima definida:typedef struct _IR_Image {
int width;
int height;
unsigned char *pixelDataIRGray;
} IR_Image;
Podes agora finalmente em qualquer ponto do teu programa ler uma imagem PGM... (repara como só depois de todas estas linhas escritas consegues ter aquela que é equivalente à do exemplo com utilização em MatLab):IR_Image *readPGM(const char *filename){ // Le imagem PGM
char buff[16];
IR_Image *img;
FILE *fp;
int c, pgm_comp_color;
// Abre ficheiro PPM para leitura
fp = fopen(filename, "rb");
if (!fp){
fprintf(stderr, "Unable to open file '%s'\n", filename);
exit(1);
}
// Le cabeçalho da imagem
if (!fgets(buff, sizeof(buff), fp)){
perror(filename);
exit(1);
}
// Verifica o formato da imagem
if (buff[0] != 'P' || buff[1] != '5'){
fprintf(stderr, "Invalid image format (must be 'P5')\n");
exit(1);
}
// Aloca memoria para a estrutura da imagem
img = (IR_Image *)malloc(sizeof(IR_Image));
if (!img){
fprintf(stderr, "Unable to allocate memory\n");
exit(1);
}
// Verifica comentarios
c = getc(fp);
while (c == '#'){
while (getc(fp) != '\n');
c = getc(fp);
}
ungetc(c, fp);
// Le informacao do tamanho da imagem
if (fscanf(fp, "%d %d", &img->width, &img->height) != 2){
fprintf(stderr, "Invalid image size (error loading '%s')\n", filename);
exit(1);
}
if (fscanf(fp, "%d", &pgm_comp_color) != 1){
fprintf(stderr, "Invalid component (error loading '%s')\n", filename);
exit(1);
}
if (pgm_comp_color != 255){
fprintf(stderr, "'%s' does not have 8-bits components\n", filename);
exit(1);
}
while (fgetc(fp) != '\n');
// Aloca memoria para os pixels
img->pixelDataIRGray = (unsigned char*)malloc(img->width * img->height);
if (!img){
fprintf(stderr, "Unable to allocate memory\n");
exit(1);
}
// Le pixels do ficheiro
if (fread(img->pixelDataIRGray, img->width, img->height, fp) != img->height){
fprintf(stderr, "Error loading image '%s'\n", filename);
exit(1);
}
fclose(fp);
return (img);
}
Quando essa variável não for mais necessária, é preciso libertar o espaço que está a ocupar em memória:IR_Image *matriz_imagem = readPGM("exemplo.pgm");
***************************************************************************************************************free(matriz_imagem->pixelDataIRGray);
free(matriz_imagem);
Concordo plenamente, Nirvana!Nirvana wrote:...
Quando se tem pouca experiência a programar tudo parece confuso, mas evita cair na tentação de procurar programas idênticos já feitos, ou de pedir a terceiros que resolvam isso. Só assim irás realmente aprender...
