⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pgmimage.c

📁 这是一份基于人工神经网络的人脸训练源码。可以用于训练识别表情
💻 C
字号:
/* ****************************************************************** * HISTORY * 15-Oct-94  Jeff Shufelt (js), Carnegie Mellon University *      Prepared for 15-681, Fall 1994. * ****************************************************************** */#include <stdio.h>#include <pgmimage.h>extern char *malloc();extern char *realloc();extern char *strcpy();char *img_basename(filename)char *filename;{  char *new, *part;  int len, dex;  len = strlen(filename);  dex = len - 1;  while (dex > -1) {    if (filename[dex] == '/') {      break;    } else {      dex--;    }  }  dex++;  part = &(filename[dex]);  len = strlen(part);  new = (char *) malloc ((unsigned) ((len + 1) * sizeof (char)));  strcpy(new, part);  return(new);}IMAGE *img_alloc(){  IMAGE *new;  new = (IMAGE *) malloc (sizeof (IMAGE));  if (new == NULL) {    printf("IMGALLOC: Couldn't allocate image structure\n");    return (NULL);  }  new->rows = 0;  new->cols = 0;  new->name = NULL;  new->data = NULL;  return (new);}IMAGE *img_creat(name, nr, nc)char *name;int nr, nc;{  int i, j;  IMAGE *new;  new = img_alloc();  new->data = (int *) malloc ((unsigned) (nr * nc * sizeof(int)));  new->name = img_basename(name);  new->rows = nr;  new->cols = nc;  for (i = 0; i < nr; i++) {    for (j = 0; j < nc; j++) {      img_setpixel(new, i, j, 0);    }  }  return (new);}void img_free(img)IMAGE *img;{  if (img->data) free ((char *) img->data);  if (img->name) free ((char *) img->name);  free ((char *) img);}void img_setpixel(img, r, c, val)IMAGE *img;int r, c, val;{  int nc;  nc = img->cols;  img->data[(r * nc) + c] = val;}int img_getpixel(img, r, c)IMAGE *img;int r, c;{  int nc;  nc = img->cols;  return (img->data[(r * nc) + c]);}IMAGE *img_open(filename)char *filename;{  IMAGE *new;  FILE *pgm;  char line[512], intbuf[100], ch;  int type, nc, nr, maxval, i, j, k, found;  new = img_alloc();  if ((pgm = fopen(filename, "r")) == NULL) {    printf("IMGOPEN: Couldn't open '%s'\n", filename);    return(NULL);  }  new->name = img_basename(filename);  /*** Scan pnm type information, expecting P5 ***/  fgets(line, 511, pgm);  sscanf(line, "P%d", &type);  if (type != 5 && type != 2) {    printf("IMGOPEN: Only handles pgm files (type P5 or P2)\n");    fclose(pgm);    return(NULL);  }  /*** Get dimensions of pgm ***/  fgets(line, 511, pgm);  sscanf(line, "%d %d", &nc, &nr);  new->rows = nr;  new->cols = nc;  /*** Get maxval ***/  fgets(line, 511, pgm);  sscanf(line, "%d", &maxval);  if (maxval > 255) {    printf("IMGOPEN: Only handles pgm files of 8 bits or less\n");    fclose(pgm);    return(NULL);  }  new->data = (int *) malloc ((unsigned) (nr * nc * sizeof(int)));  if (new->data == NULL) {    printf("IMGOPEN: Couldn't allocate space for image data\n");    fclose(pgm);    return(NULL);  }  if (type == 5) {    for (i = 0; i < nr; i++) {      for (j = 0; j < nc; j++) {        img_setpixel(new, i, j, fgetc(pgm));      }    }  } else if (type == 2) {    for (i = 0; i < nr; i++) {      for (j = 0; j < nc; j++) {        k = 0;  found = 0;        while (!found) {          ch = (char) fgetc(pgm);          if (ch >= '0' && ch <= '9') {            intbuf[k] = ch;  k++;  	  } else {            if (k != 0) {              intbuf[k] = '\0';              found = 1;	    }	  }	}        img_setpixel(new, i, j, atoi(intbuf));      }    }  } else {    printf("IMGOPEN: Fatal impossible error\n");    fclose(pgm);    return (NULL);  }  fclose(pgm);  return (new);}int img_write(img, filename)IMAGE *img;char *filename;{  int i, j, nr, nc, k, val;  FILE *iop;  nr = img->rows;  nc = img->cols;  iop = fopen(filename, "w");  fprintf(iop, "P2\n");  fprintf(iop, "%d %d\n", nc, nr);  fprintf(iop, "255\n");  k = 1;  for (i = 0; i < nr; i++) {    for (j = 0; j < nc; j++) {      val = img_getpixel(img, i, j);      if ((val < 0) || (val > 255)) {        printf("IMG_WRITE: Found value %d at row %d col %d\n", val, i, j);        printf("           Setting it to zero\n");        val = 0;      }      if (k % 10) {        fprintf(iop, "%d ", val);      } else {        fprintf(iop, "%d\n", val);      }      k++;    }  }  fprintf(iop, "\n");  fclose(iop);  return (1);}IMAGELIST *imgl_alloc(){  IMAGELIST *new;  new = (IMAGELIST *) malloc (sizeof (IMAGELIST));  if (new == NULL) {    printf("IMGL_ALLOC: Couldn't allocate image list\n");    return(NULL);  }  new->n = 0;  new->list = NULL;  return (new);}void imgl_add(il, img)IMAGELIST *il;IMAGE *img;{  int n;  n = il->n;  if (n == 0) {    il->list = (IMAGE **) malloc ((unsigned) (sizeof (IMAGE *)));  } else {    il->list = (IMAGE **) realloc ((char *) il->list,      (unsigned) ((n+1) * sizeof (IMAGE *)));  }  if (il->list == NULL) {    printf("IMGL_ADD: Couldn't reallocate image list\n");  }  il->list[n] = img;  il->n = n+1;}void imgl_free(il)IMAGELIST *il;{  free((char *) il->list);  free((char *) il);}void imgl_load_images_from_textfile(il, filename)IMAGELIST *il;char *filename;{  IMAGE *iimg;  FILE *fp;  char buf[2000];  if (filename[0] == '\0') {    printf("IMGL_LOAD_IMAGES_FROM_TEXTFILE: Invalid file '%s'\n", filename);    return;  }  if ((fp = fopen(filename, "r")) == NULL) {    printf("IMGL_LOAD_IMAGES_FROM_TEXTFILE: Couldn't open '%s'\n", filename);    return;  }  while (fgets(buf, 1999, fp) != NULL) {    imgl_munge_name(buf);    printf("Loading '%s'...", buf);  fflush(stdout);    if ((iimg = img_open(buf)) == 0) {      printf("Couldn't open '%s'\n", buf);    } else {      imgl_add(il, iimg);      printf("done\n");    }    fflush(stdout);  }  fclose(fp);}imgl_munge_name(buf)char *buf;{  int j;  j = 0;  while (buf[j] != '\n') j++;  buf[j] = '\0';}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -