#include #include #include #include #include #include //#define round(x)((x)>=0?(int)((x)+0.5):(int)((x)-0.5)) #define round(x)((int)((x)+0.5)) #define ThrowWandException(wand) { char *description; ExceptionType severity; description=MagickGetException(wand,&severity); (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); description=(char *) MagickRelinquishMemory(description); exit(-1); } int findmax (uint8_t *p, int n) { int mx = 0, v = p[0]; for (int i = 1; i < n; i++) { if (p[i] > v) { v = p[i]; mx = i; } } return mx; } int main(int argc, char **argv ) { MagickWand *magick_wand, *first_wand, *output_wand; PixelIterator *input_iterator, *output_iterator; PixelWand **pixels, *p_out; double green, red, blue; int i,j, k, x, y; int image = 0; int nImages = 0; unsigned long height, width; char filename[256]; char rgb[128]; char *temp; FILE *input_file; uint8_t ****array; uint8_t ***output; // open the first image and get the height and width first_wand = NewMagickWand(); if(MagickReadImage(first_wand, argv[2]) == MagickFalse) { ThrowWandException(first_wand); } height = MagickGetImageHeight(first_wand); width = MagickGetImageWidth(first_wand); first_wand = DestroyMagickWand(first_wand); printf("height: %ld width:%ld \n", height, width); // count how many images there are in the input file FILE *count = fopen( argv[1], "r"); if(count != NULL) { while((fgets(filename, sizeof(filename), count)) != NULL) { nImages++; } fclose(count); } printf("number of images: %d \n", nImages); // initialize the storage arrays output = calloc(height, sizeof(output[0])); for(i = 0; i < height; i++) { output[i] = calloc(width, sizeof(output[0][0])); for(j = 0; j < width; j++) { output[i][j] = calloc(3, sizeof(output[0][0][0])); } } array = calloc(nImages, sizeof(array[0])); for(i = 0; i < nImages; i++) { array[i] = calloc(height, sizeof(array[0][0])); for(j = 0; j < (long) height; j++) { array[i][j] = calloc(width, sizeof(array[0][0][0])); for(k = 0; k < width; k++){ array[i][j][k] = calloc(3, sizeof(array[0][0][0][0])); } } } MagickWandGenesis(); // store each pixel in the storage array. array[nImage][height][width][ { R, G, B} ] input_file = fopen ( argv[1], "r" ); if ( input_file != NULL ) { while ((fgets(filename, sizeof(filename), input_file)) != NULL ) { temp = strchr(filename, '\n'); if (temp != NULL) *temp = '\0'; magick_wand = NewMagickWand(); MagickReadImage(magick_wand, filename); input_iterator = NewPixelIterator(magick_wand); printf("Image number:%d Filename: %s \n", image, filename); for (i=0; i